一也切、聲明對象的兩種語法
let obj = { 'name' : 'frank' , 'age' : 18}
-
let obj = new Object ({ 'name' : 'frank'})
兩種寫法都可以尸曼,只是第二種更規(guī)范 - 細節(jié)
鍵名是字符串,不是標識符压状,可以包含任意字符
引號可以省略晦雨,但鍵名還是字符串初狰,省略之后就只能寫標識符
二、如何刪除對象的屬性
- delete obj .xxx或delete obj ['xxx']
如使用undefined诱鞠,屬性名還在挎挖,只是屬性值為undefined
而使用delete obj.name,name及其屬性值都沒了
- 'xxx' in obj 可查看xxx是不是obj的屬性名
- xxx' in obj && obj.xxx可查看屬性值
三航夺、如何查看對象的屬性
- 查看自身所有屬性
Object.keys(obj) 查看屬性名
Object.values(obj)查看屬性值
Object.entries(obj)查看屬性名和屬性值
- 查看自身及共有屬性
console.dir(obj)
或者自己依次用Object.keys打印出obj.__ proto__
- 判斷一個屬性是自身的還是共有的
obj.hasOwnProoerty('name')
如是自身的則返回true蕉朵,如為共有則返回false
四、如何修改或增加對象的屬性
修改或增加屬性
- 直接賦值
let obj ={name:'frank'}
obj.name='frank'
obj['name']='frank'
obj['na'+'me']='frank'
let key= 'name'; obj[key] ='frank'
- 批量賦值
Object.assign(obj,{age:18,gender:'male'})
修改或增加共有屬性
obj.__proto__.toString='xxx'
不推薦此方法
Object.prototype.toString='xxx'
一般不要修改原型阳掐,會出現(xiàn)很多問題
修改隱藏屬性
- 不推薦使用__ proto__
let obj ={name:'frank}
let obj2 ={name:'jack'}
let common ={kind:'human'}
obj.__proto__ =common
obj2.__proto__ =common
- 推薦使用Object.create
let obj =Object.create(common)
obj.name ='frank'
let obj2 =Object.create(common)
obj2.name ='jack'
五始衅、'name' in obj和obj.hasOwnProperty('name') 的區(qū)別
'name' in obj 是查看name是否為obj的屬性,但當使用'toString in obj' 時也返回true缭保,所以隱藏屬性無法使用此寫法汛闸。
應該使用obj.hasOwnProperty('toString')查看