对象是JS数据类型当中的唯一一种复杂类型。它是无序的数据集合,用于存储各种键值对和更复杂的实体。
- 声明对象
let obj = { 'name': 'frank', 'age': 18 }
let obj = new Object({'name': 'frank'})
其中,第一行是比较普遍的声明方式,第二行是标准的声明方式。
注意:
-
键名是字符串,不是标识符,可以包含任意字符
-
引号可省略,省略之后就只能写标识符,键名里有特殊字符不能省略
就算引号省略了,键名也还是字符串
变量x做属性名:{ [x]:value }
- 如何删除对象的属性
设属性名为xxx,则删除xxx属性的操作为:
delete obj['xxx'] delete obj.xxx
确认是否删除完成,结果为false时,对象中不含此属性名
'xxx' in obj // false
只删除属性值,不删除属性名的操作:
obj.xxx = undefined
确认删除后的结果:含有属性名,但是值为 undefined
'xxx' in obj && obj.xxx === undefined
- 如何查看对象
查看对象obj的自身所有属性: Object.keys(obj)
查看对象obj的自身所有值: Object.values(obj)
查看对象的属性和值: obj Object.entries(obj)
查看自身属性+共有属性:console.dir(obj)
判断一个属性是自身属性还是共有属性: obj.hasOwnProperty('property')
查看某一属性: obj['key'] obj.key
4.如何修改或增加对象的属性
直接赋值:
let obj = {name: 'frank'}
obj.name = 'frank'
obj['name'] = 'frank'
批量赋值:
Object.Assgin(obj, {age: 18, gender :'male'})
增加基本同上,已有属性则改;没有属性则增。
- 'name' in obj和obj.hasOwnProperty('name') 的区别
'name' in obj 可以确定obj中是否有name属性
obj.hasOwnProperty('name') 可以确认obj中的name属性是自身属性还是原型中的共有属性
- 关于原型
每个对象都有原型,原型里存着的是对象的共有属性;对象的原型也是对象,对象的原型也有原型,是null.
在修改共有属性的时候,无法通过对obj自身的操作来增加或修改共有属性。一般来说,不要修改原型。
有修改隐藏属性的需求时,推荐使用Object.create.