利用关键字 delete
const o = {
p: 10,
m: 20
}
delete o.p
console.log(o) // { m: 20 }
// 删除对象的属性后,在访问返回 undefined
console.log(o.p) // undefined
复制代码
五、作为函数参数
const displayPerson = (person) => {
console.log(name: ${person.name || '无名氏'}
)
console.log(age: ${person['age'] || 0}
)
}
displayPerson({ name: ‘dengke’, age: 18 })
// name: dengke
// age: 18
displayPerson({ })
// name: 无名氏
// age: 0
复制代码
六、枚举对象的属性
在JS里面枚举对象属性一共有三种方法:
-
for in: 会遍历对象中所有的可枚举属性(包括自有属性和继承属性)
-
Object.keys(): 会返回一个包括所有的可枚举的自有属性的名称组成的数组
-
Object.getOwnPropertyNames(): 会返回自有属性的名称 (不管是不是可枚举的)
1. for...in
会遍历对象中所有的可枚举属性(包括自有属性和继承属性)
const obj = {
itemA: ‘itemA’,
itemB: ‘itemB’
}
// 使用Object.create创建一个原型为obj的对象 (模拟继承来的属性)
var newObj = Object.create(obj)
newObj.newItemA = ‘newItemA’
newObj.newItemB = ‘newItemB’
for(i in newObj){
console.log(i)
}
// newItemA
// newItemB
// itemA
// itemB
// 现在我们将其中的一个属性变为不可枚举属性
Object.defineProperty(newObj, ‘newItemA’, {
enumerable: false
})
for(i in newObj){
console.log(i)
}
// newItemB
// itemA
// itemB
复制代码
补充
如果不想让
for...in
枚举继承来的属性可以借助Object.prototype.hasOwnProperty()
// 接上例
for(i in newObj){
if( newObj.hasOwnProperty(i) ) console.log(i)
}
// newItemB
复制代码
Object.prototype.hasOwnProperty()
该方法在下文有更具体的介绍
2. Object.keys()
: 会返回一个包括所有的可枚举的自有属性的名称组成的数组
// 接上例
const result = Object.keys(newObj)
console.log(result) // [“newItemB”]
复制代码
Object.keys()
该方法在下文有更具体的介绍
3. Object.getOwnPropertyNames()
会返回自有属性的名称 (不管是不是可枚举的)
// 接上例
const result = Object.keys(newObj)
console.log(result) // [‘newItemA’,‘newItemB’]
复制代码
Object.getOwnPropertyNames()
该方法在下文有更具体的介绍<