你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
当前回答
当数组稀疏时,这两者是不一样的。
var array = [0, 1, 2, , , 5];
for (var k in array) {
// Not guaranteed by the language spec to iterate in order.
alert(k); // Outputs 0, 1, 2, 5.
// Behavior when loop body adds to the array is unclear.
}
for (var i = 0; i < array.length; ++i) {
// Iterates in order.
// i is a number, not a string.
alert(i); // Outputs 0, 1, 2, 3, 4, 5
// Behavior when loop body modifies array is clearer.
}
其他回答
选择应该基于哪个成语最容易理解。
使用以下方法迭代数组:
for (var i = 0; i < a.length; i++)
//do stuff with a[i]
被用作关联数组的对象使用以下方法迭代:
for (var key in o)
//do stuff with o[key]
除非你有惊天动地的理由,否则就坚持既定的使用模式。
根据使用的循环类型和浏览器的不同,会有不同的性能。
例如:
for (var i = myArray.length-1; i >= 0; i--)
在某些浏览器上几乎是以下速度的两倍:
for (var i = 0; i < myArray.length; i++)
然而,除非你的数组是巨大的,或者你不断地循环它们,所有的都足够快。我严重怀疑数组循环是你的项目(或任何其他项目)的瓶颈。
我会根据我想引用项目的方式使用不同的方法。
如果只需要当前项,请使用foreach。
如果需要索引器进行相对比较,请使用for。(也就是说,这与上一项/下一项相比如何?)
我从来没有注意到性能上的差异。我会等到出现性能问题时再担心。
我曾见过使用对象、原型和数组的“for each”的问题
我的理解是for each是对象的属性,而不是数组
使用for (var i in myArray)你也可以遍历对象,i将包含键名,你可以通过myArray[i]访问属性。另外,你添加到对象中的任何方法都将包含在循环中,也就是说,如果你使用任何外部框架,如jQuery或prototype,或者如果你直接向对象原型添加方法,在某一点上,我将指向那些方法。