对象的可配置属性和可写属性的区别
Difference between Configurable and Writable attributes of an Object
我看到以下关于javascript,对象数据属性属性
- Configurable:指定该属性是否可以被删除或更改。
- Enumerable:指定该属性是否可以在for/in循环中返回。
- Writable:指定该属性是否可以修改
这里"可配置"answers"可写"表示相同的(属性是否可以更改),那么为什么我们需要两个单独的属性?
From: http://ejohn.org/blog/ecmascript-5-objects-and-properties/
Writable:如果为false,则该属性的值不能被修改。
Configurable:如果为false,任何试图删除该属性或更改其属性(Writable, Configurable,或Enumerable)的尝试都将失败。
Enumerable:如果为true,当用户执行for (var prop in obj){}(或类似)时,该属性将被遍历。
configurable
和writable
不代表同一件事。
configurable
表示属性描述符和存在性。
writable
仅表示属性值。
属性的描述符包含值、可枚举、可配置和可写。
场景1:通过赋值创建属性
'use strict'; // non-strict mode behaves slightly different
var foo = {};
foo.bar = 1; // operated by CreateDataProperty*
// the above is the same as
Object.defineProperty(foo, 'bar', {
value: 1,
configurable: true,
writable: true,
// ...
});
-
CreateDataProperty
是一个与ECMAScript规范一起定义的操作。
场景2:通过描述符
创建属性'use strict'; // non-strict mode behaves slightly different
var foo = {};
Object.defineProperty(foo, 'bar', {
value: 1,
// configurable => false
// writable => false
});
foo.bar = 2; // throw TypeError: Cannot assign to read only property
Object.defineProperty(foo, 'bar', {
value: 2
// ...
}); // throw TypeError: Cannot redefine property
delete foo.bar; // throw TypeError: Cannot delete property
可配置防止任何尝试'重新定义'属性的键与Object.defineProperty
, chrome将抛出一个错误符号
Uncaught TypeError: Cannot redefined property: foo
writable属性只是避免这个值被编辑
如果Writable设置为true,则表示对象属性的值可以更改。
如果Configurable设置为true,意味着对象属性的类型可以从数据属性更改为访问器属性(反之亦然);并且object属性可以被删除
- 全局变量和全局对象的属性之间有什么区别吗
- 在 app.locals 上设置属性和调用 app.set() 有什么区别?
- JS构造函数的原型属性与其原型之间的区别
- 向构造函数或原型添加属性之间的区别
- 隐藏元素:Javascript属性和CSS样式之间的区别
- Javascript属性访问速度:var.properties与var[“属性”]的区别
- 聚合物中的“观察者”与“通知”(在属性块中)与“观察者”与“侦听器”之间的区别
- 使用嵌入时,元素和属性指令之间是否有区别
- 在JavaScript中测试元素的样式属性和css值之间有区别吗
- javascript属性和javascript变量有什么区别
- 在 Javascript 中创建“私有”属性的这两种方法之间的区别
- angular $inject属性和内联数组注释的区别
- 为什么JS允许对象属性同时“引号”?和引用?有区别吗?
- javascript原型上的属性与对象上的对比;这就是区别
- 设置全局对象和窗口对象的属性有什么区别?
- JavaScript/DOM -“CSS选择器”和“CSS选择器”有区别吗?还有一个属性
- 原型构造函数和私有属性的区别
- 在angularjs中,“value”属性和“ng-value”属性有什么区别?
- 在javascript行为中使用数据属性和类/ ID有什么区别?
- 在Javascript中向对象添加属性的两种方式的区别