之前一直对这三个属性有点印象,但总是模棱两可的,上次笔试有考到,总结下
configurable
当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
默认为 false。
这个属性只是让你设置能不能删除,设置为并不是不可以赋值
看代码吧:
let obj = {
name: 'han',
age: 19
}
Object.defineProperty(obj,'age',{
configurable: false
})
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}值为....`,obj[key]);
}
}
obj.age = 18
console.log(obj.age);
console.log(delete obj.age);
console.log(delete obj.name);
enumerable
当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。
默认为 false
let obj = {
name: 'han',
age: 19
}
Object.defineProperty(obj,'age',{
enumerable: false
})
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}值为....`,obj[key]);
}
}
obj.age = 18
console.log(obj.age);
console.log(delete obj.age);
console.log(delete obj.name);
writable
当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符改变。
默认为 true。
let obj = {
name: 'han',
age: 19
}
Object.defineProperty(obj,'age',{
writable: false
})
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}值为....`,obj[key]);
}
}
obj.age = 18
console.log(obj.age);
console.log(delete obj.age);
console.log(delete obj.name);