object.defineproperty和{}的区别

var o = {};

o.a = 1;

// 等同于 :Object.defineProperty(o, "a", {

  value : 1,

  writable : true,

  configurable : true,

  enumerable : true});

// 另一方面,

Object.defineProperty(o, "a", { value : 1 });

// 等同于 :Object.defineProperty(o, "a", {

  value : 1,

  writable : false,

  configurable : false,

  enumerable : false});

属性特性 enumerable 定义了对象的属性是否可以在 for…in 循环和 Object.keys() 中被枚举。如果设置false,在循环中该属性将不被取到。

configurable 特性表示对象的属性是否可以被删除即:delete o.a无效,以及除 writable 特性外的其他特性是否可以被修改,即:o.a=7无效。

你可能感兴趣的:(object.defineproperty和{}的区别)