为什么可配置:false 允许更改可写标志,但不允许可枚举



我正在编写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

在这种情况下,您可以将writablefalse更改为true或从true更改为false;该属性是完全可配置的。

2( 可配置标志设置为 false

该规范允许将数据属性上的writable标志从true更改为false,但不允许false更改为true

最新更新