Javascript 为什么可配置:false允许更改可写标志,但不允许更改';可枚举的nt
我正在编写javascript程序,以了解设置为false的可配置标志如何影响属性。该计划是:Javascript 为什么可配置:false允许更改可写标志,但不允许更改';可枚举的nt,javascript,browser,ecmascript-6,ecmascript-5,Javascript,Browser,Ecmascript 6,Ecmascript 5,我正在编写javascript程序,以了解设置为false的可配置标志如何影响属性。该计划是: let user={ name:"heman" }; Object.defineProperty(user, "name",{ configurable:false }); try{ Object.defineProperty(user, "name",{ configurable:true }) }//Throws error catch(err){conso
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”。我将name属性的可配置标志设置为false(可配置:false)。然后我尝试再次将可配置标志更改为true,但它抛出了一个错误。在我尝试将enumerable标志更改为false(与默认值相反)之后,它再次抛出了一个错误。这一次,我试图将可写标志更改为false。标志已更改,但未引发任何错误。即使将可配置标志设置为false,为什么属性仍然是可配置的?为什么可写标志更改时没有抛出任何错误。我想知道在以下两种情况下会发生什么:
1) 可配置标志设置为true
2) 可配置标志设置为false
为什么可写标志更改时没有抛出任何错误
因为规范允许将数据属性上的可写
标志从true
更改为false
,即使属性的可配置
属性为false
。可悲的是,规范并没有详细说明为什么事情是这样的,但它通常非常精确地说明了它们是什么。:-)
我想知道在以下两种情况下会发生什么:
你最好的办法就是去
1) 可配置标志设置为true
在这种情况下,您可以将writeable
从false
更改为true
,或从true
更改为false
;该属性是完全可配置的
2) 可配置标志设置为false
规范允许将数据属性上的
可写
标志从真
更改为假
,但不从假
更改为真
我想澄清疑问。我知道我们说可写、可枚举和可配置是标志。但我们能说价值也是一种价值吗flag@user9218974-不,标志是真/假值。@MahdiYounesi-是一个糟糕的编辑,不应该被批准。这是蹩脚的英语,字段名称错误,并且删除了部分含义。@tryingToLearn-请查看上面的评论。