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

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

Patricia Arquette
发布: 2024-12-24 12:49:11
原创
264 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板