我试图显式设置configurable: false
为我的对象的属性,并期望这不应该允许从我的对象中删除该属性,但有些方式它似乎不工作,因为我的属性仍然被删除。这里出了什么问题?
我在做什么
var emp = {
name: 'Rojer',
}
Object.defineProperty(emp, 'id', {
configurable : false,
value : 5100
});
delete emp.id;
for (p in emp) {
document.write('<br/>' + emp[p]);
}
结果现在只打印name
属性的值。
我期待
忽略delete emp.id;
语句,同时打印id
和name
问题不在于configurable
属性:问题在于您需要将enumerable
设置为true:
Object.defineProperty(emp, 'id', {
configurable : false,
enumerable : true,
value : 5100
});
enumerable
默认为false,这意味着新变量(id
)不会出现在for/in循环中,这就是为什么您没有看到它。