Javascript:for(var i< array.length)v.s. for(e in array)

时间:2013-08-21 03:31:22

标签: javascript for-loop

我认为之前必定存在这样的问题,但目前的搜索引擎无法向搜索代码行的查询提供结果。

我的问题是:

之间有什么区别
for ( var i = 0; i < array.length; i ++ )
    console.log(array[i]);

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

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

3 个答案:

答案 0 :(得分:2)

迭代javascript数组时,

for...in实际上可能是个问题。它迭代数组中的所有属性名称,因此它可能比实际数组值更多。如果你要说

 array.custom ="x"

然后它将打印“custom”以及任何其他属性和数组的所有索引。

另一个结果超出了数组的长度,并将传递数组中每个项的索引。这是在Javascript中迭代数组的更安全的方法。

答案 1 :(得分:2)

那么第一个会遍历数组中元素的索引。第二个遍历任何对象中的属性和方法,给定一个数组也是一个常规对象,它具有“特殊”原生特征(元素的数字索引),它也可以像任何其他对象一样通过第二个循环,区别在于:第一种方式,数组中索引的元素将显示出来。在第二种方式中,不仅会迭代它,还会迭代数组对象继承的任何其他属性和方法。

答案 2 :(得分:0)

我相信这里的真正问题应该是它们之间的区别是什么

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

和:

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

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