我想知道:JavaScript中的forEach
和for
循环之间是否存在显着差异。
考虑这个例子:
var myArray = [1,2,3,4];
myArray.forEach(function(value) {
console.log(value);
});
for (var i = 0; i < myArray.length; i++) {
console.log(myArray[i]);
}
以下是我研究的一部分:
例如:您想知道数字是否为素数。我认为使用for循环比使用forEach循环要容易得多。
我的问题是:
答案 0 :(得分:17)
forEach
是Array
原型上的一种方法。它遍历数组的每个元素并将其传递给回调函数。
基本上,forEach
是用例“将array
的每个元素传递给function
”的简写方法。以下是一个常见示例,我认为Array.forEach
与for
循环相比非常有用:
// shortcut for document.querySelectorAll
function $$(expr, con) {
return Array.prototype.slice.call((con || document).querySelectorAll(expr));
}
// hide an element
function hide(el) {
el.style.display = 'none';
}
// hide all divs via forEach
$$('div').forEach(hide);
// hide all divs via for
for (var divs = $$('div'), i = 0; i < divs.length; i++) {
hide(divs[i])
}
如您所见,与for
循环相比,forEach语句的可读性得到了改进。
另一方面,for
语句更灵活:它不一定涉及数组。普通for
循环的性能稍好一些,因为没有涉及每个元素的函数调用。尽管如此,建议在for
语句写入时避免forEach
循环。
答案 1 :(得分:15)
在forEach
循环中,您无法控制迭代数组的方式。经典的for
循环允许您根据需要选择迭代算法(i++
; i--
; i+=2*i
等。
然而,forEach
循环更容易使用 - 您不需要弄乱所有i
计数,找到array[i]
对象 - JS就是这样做的对你而言。
答案 2 :(得分:7)
>> sparseArray = [1, 2, , 4];
>> sparseArray.forEach(console.log, console);
1 0 [1, 2, 3: 4]
2 1 [1, 2, 3: 4]
4 3 [1, 2, 3: 4]
>> for(var i = 0; i < sparseArray.length; ++i) { console.log(sparseArray[i]) };
1
2
undefined
4
forEach
是最近在javascript中使表达式列表理解风格成为可能的补充。您可以在此处看到forEach
跳过未设置的元素,但使用for
循环可以做的最好的事情是检查undefined
或{{ 1}},两者都可以设置为值并由null
选取。除非您预计缺少值,forEach
相当于forEach
个循环,但请注意您无法提前停止,因为您需要for
。
答案 3 :(得分:0)
简单地说,根据下面的文章和研究,似乎主要区别在于:
用于循环
break
退出(iterator, counter, incrementor)
ForEach循环
i <= >= etc.....
出现偶然错误的可能性较小(iterator, Index of item, entire array)
答案 4 :(得分:0)
这是JavaScript中的forEach和for循环之间的区别。
在性能方面,我更喜欢for循环而不是forEach循环。 这只是我在forEach循环中遇到的一些问题之一。
let abc = [1,2,3]
abc.forEach((e) => {
delete e;
})
console.log(abc) //Array(3) [ 1, 2, 3 ]
for (let i = 0; i < abc.length; i++) {
delete abc[i];
}
console.log(abc) //Array(3) [ <3 empty slots> ]
答案 5 :(得分:0)
除了灵活性之外,我之所以使用for
循环的一个主要原因是,如果我需要提前break
退出循环。
在下面的示例代码中,如果您只想在数组中返回某个value
,则可以使用if
语句检查条件是否匹配,然后退出循环。 forEach
方法会迭代每种食物,这可能会导致性能问题。
//Assume that foodArray has been declared
for (let i = 0; i < foodArray.length; i++) {
if (foodArray[i].name === 'Pizza') {
console.log('PIZZA EXISTS');
break;
}
}
答案 6 :(得分:0)
forEach
For循环