Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中forEach和for循环的区别_Javascript_Loops_For Loop_Foreach - Fatal编程技术网

javascript中forEach和for循环的区别

javascript中forEach和for循环的区别,javascript,loops,for-loop,foreach,Javascript,Loops,For Loop,Foreach,我想知道: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]); } var myArray=[1,2,3,4]; myArray.forEac

我想知道: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]);
}
var myArray=[1,2,3,4];
myArray.forEach(函数(值){
console.log(值);
});
对于(var i=0;i
以下是我研究的一部分:

  • 性能:根据:forEach比for循环稍慢
  • 可用性:在forEach循环的情况下,我们无法中断/返回回调
  • 例如:您想知道一个数字是否为素数。我认为使用for循环要比使用forEach循环容易得多

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

  • 与for循环相比,forEach的优势是什么
  • 在什么情况下,forEach更可取
  • 为什么它会出现在JavaScript中?为什么需要它呢
  • 是一种基于原型的方法。它遍历数组的每个元素,并将其传递给回调函数

    因此,基本上是用例“将
    数组
    的每个元素传递给
    函数
    ”的简写方法。下面是一个我认为非常有用的常见示例,与
    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])
    }
    
    //document.querySelectorAll的快捷方式
    函数$$(expr,con){
    返回Array.prototype.slice.call((con | | document.queryselectoral(expr));
    }
    //隐藏元素
    函数隐藏(el){
    el.style.display='none';
    }
    //通过forEach隐藏所有div
    $$('div').forEach(隐藏);
    //通过隐藏所有div,以便
    对于(var divs=$$('div'),i=0;i
    如您所见,与for循环相比,forEach语句的可读性有所提高


    另一方面,
    for
    语句更灵活:它不一定涉及数组。正常的
    for
    循环的性能稍好一些,因为所涉及的每个元素都没有函数调用。尽管如此,当可以将
    forEach
    语句写入时,建议避免
    for
    循环。

    forEach
    循环中,您无法控制迭代数组的方式。经典的
    for
    循环允许您根据需要选择迭代算法(
    i++
    i--
    i+=2*i
    ,等等)

    然而,一个
    forEach
    循环更容易使用-你不需要搞乱所有的
    i
    计数,找到
    array[i]
    对象——JS为你做这件事;
    >> 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 
    
    >>sparseArray.forEach(console.log,console); 1 0 [1, 2, 3: 4] 2 1 [1, 2, 3: 4] 4 3 [1, 2, 3: 4] >>对于(var i=0;i
    forEach
    是最近添加的一个功能,它使javascript中的表达性列表理解风格成为可能。在这里您可以看到,
    forEach
    跳过从未设置的元素,但是使用
    for
    循环可以做的最好的事情是检查
    未定义的
    null
    ,这两者都可以设置为值并由
    forEach
    拾取。除非您期望缺少值,
    forEach
    相当于
    for
    循环,但请注意,您不能提前停止,根据下面的文章和研究,简单地说,您需要
    每一个

    用于循环

  • 这是迭代数组的原始方法之一
  • 更快
  • 您可以使用此关键字
    中断
  • 在我看来,它主要用于计算整数(数字)
  • 参数是
    (迭代器、计数器、增量)
  • ForEach循环

  • 这是一种更新的方法,在数组上迭代的代码更少
  • 易读
  • 允许您将变量保持在范围内
  • 使用
    i=etc…..
  • 参数是
    (迭代器、项索引、整个数组)

  • 在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> ]
    
    让abc=[1,2,3]
    abc.forEach((e)=>{
    删除e;
    }) 
    log(abc)//数组(3)[1,2,3]
    对于(设i=0;i
    除了灵活性之外,我之所以使用
    for
    循环的一个主要原因是,如果我需要
    尽早打破循环

    在下面的示例代码中,如果只想在数组中返回某个
    ,可以使用
    if
    语句检查条件是否匹配,然后从循环中中断。forEach的
    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;
      }
    }
    
    //假设foodArray已声明
    for(设i=0;i
    forEach

  • forEach是一种基于阵列原型的方法
  • 它很容易使用
  • 它包含一个回调函数,数组中的每个元素都传递给回调函数
  • 由于回调,您不能将wait与forEach一起使用,这将导致不同于预期的输出
  • 由于回调函数,它比for循环慢
  • 因为你