javascript中forEach和for循环之间的区别

时间:2014-09-23 12:16:05

标签: javascript loops for-loop foreach

我想知道:JavaScript中的forEachfor循环之间是否存在显着差异。

考虑这个例子:

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]);
}

以下是我研究的一部分:

  1. 效果:根据JsPerf:forEach比循环慢一点。
  2. 可用性:在forEach循环的情况下,我们无法从回调中断/返回。
  3. 例如:您想知道数字是否为素数。我认为使用for循环比使用forEach循环要容易得多。

    1. 可读性:使用for循环使代码比在代码中使用forEach更具可读性。
    2. 浏览器兼容性:IE中不支持forEach&lt; 9因此,我们的代码中引入了一些垫片。
    3. 我的问题是:

      1. forEach over for循环有什么好处?
      2. 在哪些情况下,forEach更为可取。
      3. 为什么即使它进入JavaScript?为什么需要呢?

7 个答案:

答案 0 :(得分:17)

forEachArray原型上的一种方法。它遍历数组的每个元素并将其传递给回调函数。

基本上,forEach是用例“将array的每个元素传递给function的简写方法。以下是一个常见示例,我认为Array.forEachfor循环相比非常有用:

// 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)

简单地说,根据下面的文章和研究,似乎主要区别在于:

用于循环

  1. 这是遍历数组的原始方法之一
  2. 更快
  3. 您可以使用此关键字从其中break退出
  4. 我认为它主要用于整数(数字)计算
  5. 参数为(iterator, counter, incrementor)

ForEach循环

  1. 这是一种更新的方法,只需较少的代码即可遍历数组
  2. 更容易阅读
  3. 让您将变量保持在范围内
  4. i <= >= etc.....出现偶然错误的可能性较小
  5. 参数为(iterator, Index of item, entire array)

https://alligator.io/js/foreach-vs-for-loops/

答案 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

  1. forEach是Array原型上的一种方法。
  2. 易于使用
  3. 它包含一个回调函数,数组中的每个元素都传递给回调函数
  4. 由于回调,您不能将await与forEach一起使用,这将导致输出与预期不同。
  5. 由于回调函数,它比for循环慢
  6. 由于回调,您不能使用break

For循环

  1. 在for循环中,您需要索引,条件以及索引变量的增/减
  2. 比foreach快
  3. 您可以使用break
  4. 它与await一起使用