https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty状态:
可配置:当且仅当此属性描述符的类型可以更改并且可以从相应对象中删除该属性时才为真。默认为
false
.
所以,我有一个
var x = Object.defineProperty({}, "a", {
value:true,
writable:true,
enumerable:true,
configurable:false
});
现在我可以玩x.a = false
,for(i in x)
等等。但即使描述符应该是不可配置的,我也可以
Object.defineProperty(x, "a", {writable:true}); // others defaulting to false
Object.defineProperty(x, "a", {}); // everything to false
Object.freeze(x); // does the same to the descriptors
反过来,再次将它们设置为 true,或者尝试定义访问器描述符,现在会引发错误。准确地说:Object.defineProperty: invalid modification of non-configurable property
.
为什么我可以“降级”描述符,尽管他们说它们是不可配置的?