Object.defineProperty是否检查属性是否已定义?

Nav*_*eth 3 javascript json properties object


我需要为javascript对象定义属性.
var obj = {};
obj['prop1'] = 1


以上述方式,我们可以定义属性.
现在,让我们使用Object.defineProperty
var obj = {}; Object.defineProperty(obj,'prop1',{value:1});
这是另一种方式.

两者有什么区别?
是否Object.defineProperty检查该属性已被定义或没有?
我相信obj['prop1'] = 1检查属性
谢谢:)

编辑
这些之间的任何性能变化?

jAn*_*ndy 6

既不是直接对象访问,也Object.defineProperty不会" 检查 "现有属性.这两者之间的唯一区别是修改属性描述符值的可能性.

属性描述符是

  • 枚举
  • 配置

这些都是true通过使用直接属性访问来设置的.随着Object.defineProperty你必须单独设置这些属性的选项.我建议你阅读这个MDN,以了解其含义.

例如,如果一个属性拥有该标志configurable=false,则不能覆盖或删除它(这可能是您的问题).


关于表现:

由于Object.defineProperty每次都需要执行一个函数,因此它必须比对象的直接访问慢.我创建了这个小基准:

http://jsperf.com/property-access-with-defineproperty

然而,即使差异看起来很大,你也可能不会忘记它的价值和原因Object.defineProperty.