# JS对象基本语法
# 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
不会忽略掉那些从原型链上继承到的属性