1. 对象
1.1 定义
- 无序的数据集合
- 键值对的集合
1.2 声明对象的写法
let obj = {'name': 'hello' , 'age' : 18} 或者写成 let obj = new Object ({ 'name' : 'hello'})
上面的写法是等价的。甚至可以console.log({'name' : 'hello'})来声明对象
1.3 注意
- 键名是字符串,不是标识符,可以包含任意字符
- 引号可以省略,但省略之后只能写标识符
- 即便省略引号,键名依旧是字符串
2. 如何删除对象的属性
- delete obj.xxx或delete obj['xxx']:可以删除obj的xxx属性
- 'xxx' in obj ===false: 表示不含属性名
- 'xxx' in obj && obj.xxx ==undefined:表示含有属性名,但是值为undefined
注意:使用obj.xxx === undefined不能断定'xxx' 是否为obj的属性
3. 如何查看对象属性
3.1 查看所有属性
- Object.keys(obj):查看自身所有属性
- console.dir(obj):查看自身+共有属性
- obj.hasOwnProperty('toString')
3.2 查看属性
- obj['key']
- obj.key
建议:优先使用中括号语法,点语法会误导你,让你以为key不是字符串
4. 修改或添加属性
4.1 修改或添加自身属性
- 直接赋值:let obj = {name : 'hello'}或者obj.name = 'hello'
- 批量赋值:Object.assign(obj,{age : 18,gender: 'gril'})
4.2 修改或添加共有属性
不推荐写法:obj.proto['toString'] = 'xxx'
推荐写法:Object.prototype['toString'] = 'xxx'
4.3 修改或添加原型
不推荐写法:obj.proto=common
推荐写法:let obj = Object.create(common)
注意:一般涉及__proto__的代码都是不建议写的
5. 'name' in obj和obj.hasOwnProperty('name')
obj.hasOwnProperty用来判断一个属性是自身还是共有的;而'name' in obj只判断是否含有属性名,两个是不一样的。