JavaScript:for(var i < array.length) 与 for (e in array) 的区别

3

我想之前可能有过这样的问题,但目前的搜索引擎无法为代码行查询提供结果。

我的问题是:

以下两种语法有什么不同:

for ( var i = 0; i < array.length; i ++ )
    console.log(array[i]);

并且

for ( var e in array )
    console.log(e);

在我的情况下,第一个返回“undefined”或数字序列,而第二个可以正常工作。

2
我就这样查了一下“for in vs for”,在谷歌上得到的第一个结果是https://dev59.com/qm435IYBdhLWcg3wtCWQ。 - elclanrs
你能展示一下数组吗?它听起来像一个对象。 - bfavaretto
在bfvaretto的评论和阅读您最后一条声明之后,您应该提供一个SSCCE,其中第一个代码片段失败。 - Fabrício Matté
1
此外,第一个代码片段应该记录数组的,而第二个记录 - bfavaretto
2
for 循环比 for...in 循环快得多;此外,出于性能考虑,这是编写条件的更好方法:for (var i = 0; l = array.length; i < l; i++) 最后,如果你想让 for 循环变得更加高效,请反转它的顺序:for (var i = items.length; i--;) - Dimitri Vorontzov
显示剩余3条评论
3个回答

2

第一个循环遍历数组中元素的索引。第二个循环遍历任何对象中的属性和方法,因为数组也是一个常规对象,具有“特殊”的本机功能(元素的数值索引),所以它可以像其他对象一样通过第二个循环进行遍历,不同之处在于:在第一种方式中,数组中索引的元素将显示出来。在第二种方式中,不仅会迭代这些元素,还会迭代任何其他继承的数组对象具有的属性和方法。


2

for...in 在迭代 JavaScript 数组时可能会出现问题。它会遍历数组中的所有属性名称,因此可能会超过实际的数组值。如果你想要遍历数组,请使用

 array.custom ="x"

然后它会打印出“custom”以及数组中所有其他属性和所有索引。

另一个结果是遍历整个数组并传递数组中每个项的索引。这是在Javascript中迭代数组的更安全的方法。


0

我相信这里真正的问题应该是什么:

“之间的区别是什么?”
for ( var i = 0; i < array.length; i ++ )
    console.log(array[i]);

并且:

for ( var e in array )
    console.log(array[e]);

因为你应该比较两个应该显示相同内容的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接