1.聲明對象
- 定義:無序的數(shù)據(jù)集合、鍵值對的集合
- 寫法
var obj = new Object({key:value})
let obj = {key1:value1,key2:value2}
- 屬性名:每個key都是對象的屬性名(property)
- 屬性值:每個value都是對象的屬性值
特殊的屬性名
- 所有屬性名會自動把變成字符串
- Object.keys(obj) 查看obj的所有key
變量作屬性名
不加
[]
的屬性名會自動變成字符串
加了[]
則會當(dāng)作變量求值
let p1 = 'name'
let obj = {p1:'fanison'}
let obj = {[p1]:'fanison'}
對象的隱藏屬性
js中每個對象都有隱藏屬性
隱藏屬性存儲著原型的地址
2.刪除屬性
delete obj.xxx
delete obj['xxx']
通過使用
'xxx' in obj
查看obj是否含有xxx屬性姆打,發(fā)現(xiàn)obj.xxx = undefined
不能刪除屬性涤久,只是將屬性值xxx設(shè)置為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')]
相當(dāng)于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})
- 修改或增加共有屬性
無法通過自身修改或增加共有屬性
修改或增加原型上屬性會引發(fā)問題
- 修改隱藏屬性
使用
__proto__
不推薦
使用Object.create
推薦
不推薦
推薦
'name' in obj
和 obj.hasOwnProperty('name')
的區(qū)別:
-
hasOwnProperty
會忽略掉那些從原型鏈上繼承到的屬性 -
in
不會忽略掉那些從原型鏈上繼承到的屬性