gpt4 book ai didi

javascript - 什么时候不需要 `hasOwnProperty`?

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

什么时候不需要hasOwnProperty

这本书 JavaScript: The Good Parts 包括以下内容,其中说“这通常是必要的”:

The other form (called for in) enumerates the property names (or keys) of an object. On each iteration, another property name string from the object is assigned to the variable.

It is usually necessary to test object.hasOwnProperty(variable) to determine whether the property name is truly a member of the object or was found instead on the prototype chain.

for (myvar in obj) {
if (obj.hasOwnProperty(myvar)) {
...
}
}

更具体地说,我想枚举一个简单的类字典对象的属性,它是使用 Javasacript 对象字面量语法创建的,例如:

var foo = { 'bar': 'baz' };

或使用 JSON.parse 创建的类似对象:

var foo = JSON.parse("{ 'bar': 'baz' }");

当我对 foo 对象执行 for in 时,我应该使用 hasOwnProperty 吗?

假设此 javascript 作为复杂网页的一部分在随机浏览器中运行。

是答案,“在实践中,它可能/通常没有必要。理论上,如果某些框架或库通过更改 Object.prototype 添加属性,但更改 则可能是必要的像这样的 Object.prototype 将是一种侵入性的不良做法,任何受人尊敬的框架都不太可能这样做“?

最佳答案

恕我直言,在现代 JS 解释器中几乎[*] 不需要它,尤其是对于仅用作字典的普通对象。

没有它,jQuery 也能很好地管理,因为人们已经了解到,不安全地向 Object.prototype 添加可枚举属性是一个坏主意。

当然,ES5 允许您将不可枚举 属性添加到Object.prototype,如果您确实需要的话,使用Object.defineProperty.

[*] 上述情况的异常(exception)情况是,如果您正在编写专门检查原型(prototype)链的代码并且确实需要知道可枚举属性是否被继承

关于javascript - 什么时候不需要 `hasOwnProperty`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539249/

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