<分区>
在 javascript 中,如果我想遍历数组中的每个元素,我有几种方法可以做到这一点:
1.
for(var i =0; i<array.length; i++){}
2.
array.forEach(function(item, index){});
3.
for (var index in array){}
第一个是普通的,但是如果我觉得懒,我想用第二个或第三个。
但是我想知道它们之间有什么区别,在什么情况下应该选择哪个?
<分区>
在 javascript 中,如果我想遍历数组中的每个元素,我有几种方法可以做到这一点:
1.
for(var i =0; i<array.length; i++){}
2.
array.forEach(function(item, index){});
3.
for (var index in array){}
第一个是普通的,但是如果我觉得懒,我想用第二个或第三个。
但是我想知道它们之间有什么区别,在什么情况下应该选择哪个?
最佳答案
它们都是微妙不同的方法。
for(var i = 0; i<array.length; i++){}
是行之有效的方法;感觉像 C,工作像 C。
.length
的对象和名称为 [0..length] 的属性;虽然它也适用于人口稀少的阵列,但可能需要额外的保护措施。forEach
, 这允许使用 continue/break/return
以及在循环体内手动调整索引(如果需要的话)。 array.forEach(function(item, index){})
是我更喜欢的方法,因为它通常就足够了,感觉更干净,并且是 "lazy" .
call/apply
用于类似数组的对象。 .for..i++
(从 James G. 的评论中窃取的链接)。然而,这通常无关紧要,随着 body 所做功的增加,相对性能差异将减少。 for (var index in array){}
不应在处理数组/序列迭代时使用。
这是一个demonstration of some differences :
var array = [];
array[0] = 1;
array[2] = 2; // Note that `1 in array` is false as it was never set
array.hello_world = 3;
var a = 0;
for(var i = 0; i<array.length; i++){
a += array[i]
}
// -> NaN; because array[1] was undefined
console.log("index: " + a);
var b = 0;
array.forEach(function (v, i) {
b += v;
});
// -> 3; because v was never undefined (as array[1] was skipped)
console.log("forEach: " + b);
var c = 0;
for (var p in array) {
c += array[p];
}
// -> 6; picked up "hello_world" but didn't pick up missing "1" property
console.log("for..in: " + c);
2 生成 different iteration order between browsers 的示例:
var a = [];
for (var i = 100000; i > 0; i -= 1000) { a[i] = i; }
var s = "";
for (var p in a) { s += p + ","; }
console.log(s);
Chrome 和 IE 10 以递增的方式迭代; FF 按插入顺序迭代(对于较小范围的值,FireFox 也按数字升序排序)。只是不要使用这种方法来迭代序列,不会有任何这样的问题。
关于javascript - for var index in 与 forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775486/