我想之前可能有过这样的问题,但目前的搜索引擎无法为代码行查询提供结果。
我的问题是:
以下两种语法有什么不同:
for ( var i = 0; i < array.length; i ++ )
console.log(array[i]);
并且
for ( var e in array )
console.log(e);
在我的情况下,第一个返回“undefined”或数字序列,而第二个可以正常工作。
我想之前可能有过这样的问题,但目前的搜索引擎无法为代码行查询提供结果。
我的问题是:
以下两种语法有什么不同:
for ( var i = 0; i < array.length; i ++ )
console.log(array[i]);
并且
for ( var e in array )
console.log(e);
第一个循环遍历数组中元素的索引。第二个循环遍历任何对象中的属性和方法,因为数组也是一个常规对象,具有“特殊”的本机功能(元素的数值索引),所以它可以像其他对象一样通过第二个循环进行遍历,不同之处在于:在第一种方式中,数组中索引的元素将显示出来。在第二种方式中,不仅会迭代这些元素,还会迭代任何其他继承的数组对象具有的属性和方法。
for...in
在迭代 JavaScript 数组时可能会出现问题。它会遍历数组中的所有属性名称,因此可能会超过实际的数组值。如果你想要遍历数组,请使用
array.custom ="x"
然后它会打印出“custom”以及数组中所有其他属性和所有索引。
另一个结果是遍历整个数组并传递数组中每个项的索引。这是在Javascript中迭代数组的更安全的方法。
我相信这里真正的问题应该是什么:
“之间的区别是什么?”for ( var i = 0; i < array.length; i ++ )
console.log(array[i]);
并且:
for ( var e in array )
console.log(array[e]);
因为你应该比较两个应该显示相同内容的函数。
for
循环比for...in
循环快得多;此外,出于性能考虑,这是编写条件的更好方法:for (var i = 0; l = array.length; i < l; i++)
最后,如果你想让for
循环变得更加高效,请反转它的顺序:for (var i = items.length; i--;)
- Dimitri Vorontzov