gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:40 26 4
gpt4 key购买 nike


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


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

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

编辑
它们之间有任何性能差异吗?

最佳答案

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

属性描述符是

  • 可枚举
  • 可配置
  • 可写

它们都通过使用直接属性访问 设置为true。使用 Object.defineProperty,您可以选择单独设置这些属性。我建议你阅读这个 MDN articl e 了解其含义。

例如,如果某个属性拥有标志 configurable=false,则您无法覆盖或删除它(您的问题可能就是这种情况)。


关于性能:

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

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

然而,即使差异看起来很大,您也可能不会忘记 Object.defineProperty 的值(value)和原因。

关于javascript - Object.defineProperty 是否检查属性是否已定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com