根据spec添加 javascript 对象属性时,以下默认值将应用于属性描述符:
- 可配置: false
- 可枚举: false
- 可写:假
但是,当使用以下(非常流行的)点表示法分配对象属性时,它们都默认为 true。
myObject = {};
myObject.a = 1;
这是为什么?
最佳答案
显然 - 再次根据规范的非明显部分 - 这是由于定义对象属性的方式。 请参阅here
<小时/>如果使用点表示法
方法定义对象属性:
var myObject={};
myObject.a=1;
然后所有属性描述符默认为true
<小时/>如果使用括号表示法
方法定义对象属性:
var myObject = {};
myObject["a"] = 1;
然后所有属性描述符默认为true
<小时/>但是,如果使用 defineProperty
方法定义对象属性:
var myObject={};
Object.defineProperty(myObject, 'a', { value: 1 });
任何未定义的描述符默认为false。
<小时/>请参阅此 jsfiddle 中的示例
关于javascript - 为什么 javascript 对象属性描述符不总是默认为 false (根据规范),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27726816/