1.声明对象
- 定义:无序的数据集合、键值对的集合
- 写法
var obj = new Object({key:value})
let obj = {key1:value1,key2:value2}

- 属性名:每个key都是对象的属性名(property)
- 属性值:每个value都是对象的属性值
特殊的属性名
- 所有属性名会自动把变成字符串

- Object.keys(obj) 查看obj的所有key

变量作属性名
不加
[]
的属性名会自动变成字符串
加了[]
则会当作变量求值
let p1 = 'name'
let obj = {p1:'fanison'}
let obj = {[p1]:'fanison'}



对象的隐藏属性
js中每个对象都有隐藏属性
隐藏属性存储着原型的地址

2.删除属性
delete obj.xxx
delete obj['xxx']

通过使用
'xxx' in obj
查看obj是否含有xxx属性,发现obj.xxx = undefined
不能删除属性,只是将属性值xxx设置为undefined

注意:
obj.xxx === undefined
不能断定‘xxx’为obj的属性;
通过'xxx' in obj
查看obj是否含有xxx属性
3.查看属性
- 查看自身所有属性
Object.keys(obj)
- 查看自身+共有属性
console.dir(obj)
- 查看属性
obj['key']
orobj.key
console.log('name')
的返回值是 undefined,
obj[console.log('name')]
相当于obj["undefined"]

obj.name
等价于obj['name']
obj.name
不等于obj[name]
obj.name //此处name是字符串
obj[name] //此处name是变量

4.修改属性
- 直接赋值
obj['key'] = value
orobj.key = value
value - 批量赋值
Object.assign(obj,{key:value,key:value})
- 修改或增加共有属性
无法通过自身修改或增加共有属性
修改或增加原型上属性会引发问题

- 修改隐藏属性
使用
__proto__
不推荐
使用Object.create
推荐


'name' in obj
和 obj.hasOwnProperty('name')
的区别:
-
hasOwnProperty
会忽略掉那些从原型链上继承到的属性 -
in
不会忽略掉那些从原型链上继承到的属性

网友评论