迭代对象属性:揭开 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中文网其他相关文章!