为什么JavaScript的“可写”属性描述符不禁止任何属性更改?

例如:

var TheDarkKnight = Object.create(Superhero, {
    "name": {
        value:"Batman",
        writable:"false"
    }
});

TheDarkKnight.name; //"Batman";

TheDarkKnight.name = "Superman";
TheDarkKnight.name; //"Superman";

我认为在尝试将TheDarkKnight.name更改为另一个值后"Batman"仍应返回false,因为我将“writable”属性描述符设置为ojit_code。

那么如何正确使用它呢?

最佳答案

应该是false,而不是"false"。换句话说,它应该是一个 bool(boolean) 值。

如果您不传递 bool(boolean) 值,那么您提供的任何值都将被强制转换为 bool(boolean) 值和Boolean("false") === true; // true,因此您实际上是在传递writable:true

var TheDarkKnight = Object.create(Superhero, {
    "name": {
        value:"Batman",
        writable:false // boolean false (or any falsey value)
    }
});

TheDarkKnight.name; //"Batman";

TheDarkKnight.name = "Superman";
TheDarkKnight.name; //"Batman";

另外,请注意writable:false是默认值,因此,如果仅从描述符中删除该设置,则该属性将不可写。

10-08 18:56