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

问题描述 投票:1回答:1

我正在编写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”。我将name属性的可配置标志设置为false(可配置:false)。然后我尝试再次将可配置标志更改为true它抛出了一个错误。在我尝试将可枚举标志更改为与其默认值相反的错误后,它再次引发错误。这次我试图将可写标志更改为false。标志发生了变化,没有任何错误。即使将可配置标志设置为false,为什么属性仍然可配置?为什么可写标志会发生变化而不会抛出任何错误。我想知道在以下两种情况下会发生什么:

1)可配置标志设置为true

2)可配置标志设置为false

javascript browser ecmascript-6 ecmascript-5
1个回答
1
投票

为什么可写标志会发生变化而不会抛出任何错误。

因为规范允许将数据属性上的writable标志从true更改为false,即使属性的configurable属性是false。可悲的是,规范并不是说为什么事情就是这样,但它通常非常精确地说明它们是什么。 :-)

我想知道在以下两种情况下会发生什么:

你最好的选择是read through the specification's steps for the operation

1)可配置标志设置为true

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

2)可配置标志设置为false

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

© www.soinside.com 2019 - 2024. All rights reserved.