`for...in` 循环中的奇怪行为

阅读时长 3 分钟读完

在 JavaScript 中,我们可以使用 for...in 循环来遍历一个对象中所有可枚举属性的键名。然而,这个循环有时候会表现出一些奇怪的行为,特别是当我们对数组进行遍历的时候。

数组遍历中的问题

让我们看一下下面的代码:

如果你运行这段代码,你会发现它输出了以下内容:

这里的问题在于,for...in 循环并不仅仅只遍历数组元素本身,而是会遍历数组对象上的所有可枚举属性,包括我们自己添加的 foo 属性。

因此,如果你只想要遍历数组元素本身,你需要加上一个判断语句来排除掉其他属性:

现在,这段代码只会输出:

因为我们使用了 hasOwnProperty() 方法来检查属性是否是对象本身的属性。

对象遍历中的问题

除了数组之外,在遍历对象时也可能会出现问题。让我们看一下下面的代码:

如果你运行这段代码,你会发现它输出了以下内容:

同样的,for...in 循环并不仅仅只遍历对象本身的属性,而是包括了原型链上的属性。因此,如果你只想要遍历对象自身的属性,你需要加上一个判断语句来排除掉其他属性:

现在,这段代码只会输出:

总结

在 JavaScript 中,for...in 循环虽然非常便捷,但是需要注意其奇怪的遍历行为。特别是在遍历数组和对象时,我们需要使用 hasOwnProperty() 方法去排除掉原型链上的属性,确保我们只遍历到对象/数组本身的属性。

希望这篇文章对你有所帮助!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/29358

纠错
反馈