首页 >web前端 >js教程 >为什么 `for...in` 迭代有时会包含意外的属性,如何避免这种情况?

为什么 `for...in` 迭代有时会包含意外的属性,如何避免这种情况?

Patricia Arquette
Patricia Arquette原创
2024-12-24 12:49:11298浏览

Why Does `for...in` Iteration Sometimes Include Unexpected Properties, and How Can I Avoid This?

迭代对象属性:揭开 Propt 的神秘面纱

使用 for...in 循环迭代对象的属性时,出现了一个名为 propt 的变量。该变量代表对象的每个属性键。但为什么会这样呢?

原因是 Object.prototype 包含所有对象都继承的附加属性。这些属性不是特定对象的一部分,而是由所有对象共享。例如,toString 和 hasOwnProperty 是两个常见的示例。

为了避免无意中迭代这些继承的属性,包含额外的检查至关重要:Object.prototype.hasOwnProperty.call(obj, prop)。此检查可确保正在迭代的属性专门属于该对象,并且不是从基类继承的。

为了清楚起见,这里有一个更新的代码示例:

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}

此外,虽然可以使用 obj.hasOwnProperty(prop) 代替,但如果对象具有同名的不相关字段,则此方法可能会出现故障。因此,通过 Object.prototype 调用 hasOwnProperty 更可靠。

以上是为什么 `for...in` 迭代有时会包含意外的属性,如何避免这种情况?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn