面向对象编程引导篇(JavaScript基础)

JavaScript基础知识复习

JS的组成

  • ECMAScript 规定JS语法规范和标准
  • DOM 文档对象模型,提供了一套操作dom元素的api
  • BOM 浏览器对象模型,提供了一套操作浏览器相关内容的api

JS中的数据类型

简单数据类型

  • string
  • number
  • boolean
  • undefined
  • null
    为什么说null是简单数据类型?
    实际上,null既可以是简单数据类型,也可以是复杂数据类型
    说它是简单类型,因为 null == undefined 值为true,说明null和undefined的值相等,null的数据存储方式是简单类型数据的存储方式;
    说它是复杂数据类型,因为用typeof关键字来检测null的数据类型,为object
    1
    2
    typeof null
    // "object"

复杂数据类型

  • Object
  • function
  • Math
  • Array
  • Date
  • RegExp
  • Number
  • String
  • Boolean

如何获取数据类型

1
2
3
4
typeof 数据
//返回值为string类型的类型名称
//如果是复杂类型的数据,获取到的都是object
//function获取到的是function

值类型和引用类型

值类型

直接存储的就是数据本身的数据就是值类型的数据

引用类型

存储的是数据的地址,数据单独存储的这种数据,就是引用类型的数据

值类型和引用类型的赋值特征

  • 值类型是将存储的值直接复制一份交给新的变量,两个变量值相等,但是互不影响
  • 引用类型是将数据的地址复制一份交给新的变量,两个变量同时指向同一个对象,修改一个,另一个也会受到影响
1
2
3
4
5
// 值类型的赋值
var num = 123;
var num1 = num; // 将num的值复制一份交给num1
num1 = 456;
console.log(num) // 123

01.png

1
2
3
4
5
6
7
// 引用类型的赋值
var obj = {
name: 'joke'
};
var obj1 = obj;
obj1.name = 'bob'
console.log(obj.name) .// bob

01.png

1
2
3
4
5
6
7
8
9
10
11
// 引用类型的赋值
// 注意:在函数调用的时候,会将实参赋值给形参
var obj = {
name: '高富帅'
}
function test(o) {
// o = obj // 隐含的赋值,将实参赋值给形参
o.name = '矮矬穷'
}
test(obj)
console.log(obj.name) // 矮矬穷

01.png

值类型和引用类型进行运算(+-*/ == > <)

  • 会先调用引用类型数据的valueOf方法,如果返回的值可以参与运算,那就直接运算
  • 如果返回值不能运算,那么再调用该引用类型数据的toString()方法,拿这个返回值参与运算
    1
    2
    3
    4
    5
    6
    7
    实例:[] == ![] 
    // 等式从右往左运行,![]为false
    // 即转化为 [] == false (引用类型和值类型运算)
    // 先调用[]的valueOf方法,返回值为Object,不能参与运算
    // 再调用[]的toString方法,[].toString() 返回值为 ""
    // 上述等式转化为 "" == false
    // 输出 true

对象的动态特性

是指在对象创建完成之后,可以随时为对象添加成员的特性

  • 点语法

    1
    对象名.属性名 = 值
  • 关联数组语法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    对象名["属性名"] = 值

    // 玩一玩
    var obj = {
    name: 'joke'
    };
    obj[[]] = '我是一个怪物'
    obj[{}] = '我还是一个怪物'
    // 此时输出obj
    console.log(obj)

01.png

  • 关联数组语法,[]内如果写入字面量,如[],{}, 会调用字面量的toString方法,转为字符串后作为对象的键;
    [].toString() ====> “”
    {}.toString() ====> [object Object]

in 和 delete

in

  • for-in 遍历对象的键,遍历到的键为字符串类型
  • 判断对象是否可以访问某个属性 "属性名" in 对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 语法:属性名 in 对象
    // 返回值:布尔值
    var obj = {
    name: 'joke'
    }
    console.log("name" in obj) // true

    var a; // 声明一个全局变量,相当于给window添加了一个属性
    console.log("a" in window) // true

delete

  • 删除未使用var声明的变量
  • 删除对象的属性
  • 可以删除数组元素(删除元素不影响数组的长度,以及其他元素的索引)
  • 这个关键字的返回值不可靠

逻辑中断

  • 表达式1 || 表达式2 表达式1为真返回表达1,为假返回表达式2
  • 表达式1 && 表达式2 表达式1为假返回表达1,为真返回表达式2

break和continue

  • break 跳出整个循环 继续执行循环下面的代码
  • continue 跳出本次循环,继续下次循环

面向对象的基本介绍

面向对象的概念

面向对象是一种思维方式,把解决问题的关注点放在了解决问题所需要的一些列的对象上

面向过程的概念

面向过程也是一种思维方式,把解决问题的关注点放在了解决问题的每一个详细的步骤上!

什么是对象

万物皆对象

什么是js中的对象

无序的键值对儿的集合

面向对象和面向过程的关系

面向对象其实就是对面向过程的封装!