一吱窝、聲明對(duì)象的兩種方法(對(duì)象:無序的數(shù)據(jù)集合&鍵值對(duì)的集合)
·簡(jiǎn)易聲明:let obj = { 'name' : '李雷' , 'age': '12' }? ??
·正規(guī)聲明:let obj = new Object ( { 'name' : '韓梅梅' } )
·注意細(xì)節(jié):
1.鍵名是字符串,不是標(biāo)識(shí)符入客,可包含任意字符自阱;
2.引號(hào)可省略窖式,省略之后就只能寫標(biāo)識(shí)符;
3.即使引號(hào)省略动壤,鍵名也還是字符串(重要)。
二淮逻、如何刪除對(duì)象的屬性
刪除方法:delete obj.xxx 或 delete obj['xxx']
注意細(xì)節(jié):
1.不含屬性名
'xxx' in obj === false
2.含有屬性名琼懊,但是值為undefined
'xxx' in obj && obj.xxx===undefined
3.注意 obj.xxx === undefined 不能斷定 'xxx'是否為obj的屬性
三、如何查看對(duì)象的屬性
·查看對(duì)象自身所有屬性 : Object.keys(obj)
·查看自身+共有屬性:console.dir(obj) 或依次用Object.keys打印出 obj.__proto__
·判斷一個(gè)屬性是自身的還是共有的:obj.hasOwnProperty('toString')
·中括號(hào)語(yǔ)法: obj['key']
·點(diǎn)語(yǔ)法:obj.key
優(yōu)先使用中括號(hào)語(yǔ)法
四爬早、如何修改或增加對(duì)象的屬性
·直接賦值: let obj = { name: ‘李雷’ }? ? ? ?obj.name = '李雷'? ? obj['name'] = '李雷'
·批量賦值:Object.assign(obj,{age: 18,gender:male})
·無法通過自身修改或增加共有屬性哼丈,只會(huì)改自身屬性,不影響原型的屬性筛严。
·obj.__proto__.toString='xxx' //不推薦用__proto__
·Object.prototypee.toString='xxx' 通常不要修改原型醉旦,會(huì)引起很多問題。
·推薦使用Object.create 修改隱藏屬性
let common = {kind:'human'}
let obj = Object.create(common)
obj.name='李雷'
let obj2 = Object.create(common)
obj2.name='韓梅梅'
規(guī)范大概的意思是桨啃,要改就一開始就改车胡,別后來再改
五、'name' in obj 和obj.hasOwnProperty('name')的區(qū)別
1.在某個(gè)對(duì)象是否擁有某個(gè)屬性照瘾,判斷的方法有很多匈棘,常用的方法就是object.hasOwnProperty('×××'),這個(gè)方法是不包括對(duì)象原型鏈上的方法的析命,舉個(gè)例子:
let obj = {name:'lei'}
console.log(obj.hasOwnProperty('name'))? ?//true
console.log(obj.hasOwnProperty('toString'))? //false
在這個(gè)例子中主卫,obj對(duì)象存在的name屬性的時(shí)候逃默,調(diào)用這個(gè)方法才是返回true,我們知道其實(shí)每個(gè)對(duì)象實(shí)例的原型鏈上存在toString方法簇搅,在這里打印false完域,說明這個(gè)方法只是表明實(shí)例對(duì)象的屬性,不包括原型鏈上的屬性瘩将。
2.下面我們?cè)賮砜纯磇n的使用吟税,例子如下:
let obj2 = { name:'mei'}
console.log('toString'?in?obj2)? ?//true
我們可以看到,其實(shí)在這個(gè)例子中鸟蟹,我只是給了對(duì)象一個(gè)屬性name乌妙,并沒有其他的屬性,然后我執(zhí)行'tiString' in obj建钥,可以看出控制動(dòng)態(tài)打印出來的是true藤韵,原因就是對(duì)象的原型鏈上存在toString方法,所以in操作不管是不是原型鏈上熊经,只要存在這個(gè)屬性泽艘,返回的就是true。