简介
任何事物都可以看作一个对象,用属性描述它的特征,用方法描述它的行为,如下方代码所示:
变量 obj 被赋值了一个对象,它有属性 name,属性值为 朝阳
,方法为 sayHi,具有在控制台打印 你好!
的行为。
JS 内部还定义了很多特殊的对象,如 Function 函数、Array 数组、Date日期、RegExp 正则表达式、Error 报错、Math 数学计算等。
对象的储存原理
对象的值保存在堆内存中,变量 obj 内存储的是对象的引用(对象在堆内存中存储的地址)
常用的对象操作
创建对象
ES6 的简写方式
- 对象名和属性名相同时,
name:name
可简写为name
- 方法的
:function
可省略不写
ES6 开始支持动态属性和方法
即用变量作为对象的属性和方法名
访问属性
- 访问对象中不存在的属性,返回 undefined
在对象的方法内部访问该对象的属性,可以使用this,此时 this 就是当前对象。
获取对象所有的属性 Object.keys()
获取对象所有的属性值 Object.values()
添加属性
删除属性
遍历对象 for in
合并对象 Object.assign
- 第一个参数是发起合并的对象
- 之后的参数是被合并的对象
- 可以一次合并多个对象
- Object.assign() 的返回值为合并后的对象
- Object.assign() 有副作用(会改变原对象)
拷贝对象
浅拷贝
此时变量 obj2 内存的是对象 {num:1}
的地址,变量 obj1 内存的也是对象 {num:1}
的地址,当变量改变时,obj1 和 obj2 都会改变。
深拷贝
为了避免变量后期改变时,对拷贝后的对象产生影响,经常需要进行深拷贝。
更多深拷贝的方法见
【实战】判断变量是否为空对象