聲明對象的兩種語法
let obj = { 'name': 'frank', 'age': 18 }
let obj = new Object({'name': 'frank'})
前兩種是常用的兩種語法
var obj1=Object.create({name:'frank'})
在原型內(nèi)創(chuàng)建對象
console.log({ 'name': 'frank, 'age': 18 })
如何刪除對象的屬性
delete 刪除對象的屬性
delete obj.xxx 或者 delete obj['xxx']
obj.name=undefined 刪除的是屬性值
delete obj.name 刪除的是屬性名 不含屬性名
'name' in obj ===false 不含屬性名
'name' in obj && obj.xxx===undefined 含有屬性名匈棘,但是值為undefined
注意 obj.xxx===undefined
不能斷定 'xxx' 是否為obj的屬性
如何查看對象的屬性
查看所有屬性 讀屬性
Object.keys(obj2)
Object.values(obj2)
Object.entries(obj2)
查看自身屬性+共有屬性
console.dir(obj)
或者自己依次用Object.keys 打印出 obj.proto 這種方式不推薦
兩種方法查看屬性
中括號語法:obj['key'] 優(yōu)先使用中括號語法
點語法:obj.key
坑新人語法: obj[key]
obj.name 等價于 obj['name']
obj.name不等價于 obj[name]
let name = 'frank'
obj[name] 等價于obj['frank']
而不是
obj['name'] 和 obj.name
如何修改或增加對象的屬性
直接賦值
let obj ={name: 'frank'} //name是字符串
obj.name= 'frank'
obj['name'] = 'frank'
批量賦值
Object.assign(obj, {age:18, gender: 'man'})
無法通過自身修改或增加共有屬性
let obj={}, obj2 = {]
obj.toString = 'xxx' 只會改obj自身屬性
obj2.toString 還是在原型上
偏要修改或者增加原型上的屬性
obj.proto.toString='xxx' //不推薦使用proto
Object.prototype.toString = ‘xxx'
一般來說,不要修改原型析命,會引起很多問題
js的脆弱性
修改隱藏屬性
obj.proto = null
obj.proto = common
不推薦使用proto
推薦使用Object.create
let obj = Object.create(common)
修改對象的原型主卫,要改的話一開始就改,不要后來在改
'name' in obj和obj.hasOwnProperty('name') 的區(qū)別
'name' in obj 沒有辦法判斷這個屬性是自身的還是共有的
判斷一個屬性是自身的還是共有的要用 obj.hasOwnProperty('toString')