Difference between Configurable and Writable attributes of an Object

时光毁灭记忆、已成空白 提交于 2020-04-08 00:05:03

问题


I saw the following regarding javascript, object data property attributes

— 
Configurable: Specifies whether the property can be deleted or changed.

— Enumerable: Specifies whether the property can be returned in a for/in loop.

— Writable: Specifies whether the property can be changed.

Here "Configurable" and "Writable" are representing the same (whether the property can be changed), then why do we need two separate attributes?


回答1:


From: http://ejohn.org/blog/ecmascript-5-objects-and-properties/

Writable: If false, the value of the property can not be changed.

Configurable: If false, any attempts to delete the property or change its attributes (Writable, Configurable, or Enumerable) will fail.

Enumerable: If true, the property will be iterated over when a user does for (var prop in obj){} (or similar).




回答2:


configurable and writable are NOT representing the same thing.

configurable means property descriptor and existence.

writable means property value only.

A property's descriptor contains value, enumerable, configurable and writable.

scenario 1: create property by assignment

'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 is an operation defined together with ECMAScript spec.

scenario 2: create property by descriptor

'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



回答3:


Configurable prevents any attempts to 'redefine' properties of a key with Object.defineProperty, chrome will throw an error sign

Uncaught TypeError: Cannot redefine property: foo

The writable attribute simply avoids this value from being edited




回答4:


If Writable is set to true means the object property's value can be changed.

If Configurable is set to true, means the object property's type can be changed from data property to accessor property (or vice versa); and the object property can be deleted.



来源:https://stackoverflow.com/questions/23590502/difference-between-configurable-and-writable-attributes-of-an-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!