我正在编写javascript程序来了解设置为false的可配置标志如何影响属性。 该程序是:
let user={
name:"heman"
};
Object.defineProperty(user, "name",{
configurable:false
});
try{
Object.defineProperty(user, "name",{
configurable:true
})
}//Throws error
catch(err){console.log(err)}
try{
Object.defineProperty(user, "name",{
enumerable:false
});
} //Throws Error
catch(err){console.log(err)}
try{
Object.defineProperty(user, "name", {
writable:false
});
} //Does'nt Throws Error. But Why?
catch(err){console.log(err)}
在这个程序中,我首先创建了一个名为user的对象,user包含一个属性,即name:"heman"。我将名称属性的可配置标志设置为 false (可配置:false(。然后我尝试再次将可配置标志更改为 true 它抛出了一个错误。在我尝试将可枚举标志更改为与默认值相反的 false 之后,它再次抛出了一个错误。这次当我尝试将可写标志更改为 false 时。标志已更改,未引发任何错误。即使在将可配置标志设置为 false 后,为什么该属性仍然可配置?为什么可写标志更改而没有引发任何错误。我想知道在以下两种情况下会发生什么:
1( 可配置标志设置为 true
2( 可配置标志设置为 false
为什么可写标志更改而没有抛出任何错误。
因为该规范允许将数据属性上的writable
标志从true
更改为false
,即使该属性的configurable
属性是false
。可悲的是,规范并没有说为什么事情是这样的,但它通常非常精确地说明它们是什么。:-)
我想知道在以下两种情况下会发生什么:
最好的办法是通读规范的操作步骤。
1( 可配置标志设置为 true
在这种情况下,您可以将writable
从false
更改为true
或从true
更改为false
;该属性是完全可配置的。
2( 可配置标志设置为 false
该规范允许将数据属性上的writable
标志从true
更改为false
,但不允许从false
更改为true
。