javascript - JavaScript "writable"属性描述符是如何工作的?

标签 javascript object properties ecmascript-5

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

例如:

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

TheDarkKnight.name; //"Batman";

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

我认为 TheDarkKnight.name 在尝试将其更改为另一个值后仍应返回 "Batman",因为我将“可写”属性描述符设置为 假的

那么如何正确使用呢?

最佳答案

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

如果您不传递 bool 值,那么无论您提供什么值都将被强制转换为 bool 值,并且 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 是默认值,因此如果您只是从描述符中删除该设置,该属性将不可写。

关于javascript - JavaScript "writable"属性描述符是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892375/

相关文章:

javascript - 从网页的特定 div/table 元素中的链接下载所有 pdf

javascript - Nodejs - 从对象创建可读流

javascript - 将 JSON 映射到对象

python - python.3 seater 中的无限递归

javascript - 正则表达式不允许没有前缀或后缀的特殊字符

javascript - 根据日期禁用单选按钮

java - 我如何计算每个省份有多少男性和女性,以及这些省份是按国家/地区的字母顺序排列的?

java - 服务器启动时如何在jboss-tomcat-struts中加载config.properties文件

C# - 属性的类型,以及何时使用一种而不是另一种

javascript - 如何禁用大表单中的特定表单元素