JavaScript forEach() 方法的使用及其注意事项

目录

forEach() 方法的作用、定义与用法

语法

语法分析(参数)

实际应用

注意事项


1、JavaScript forEach() 的作用与原理

  • 作用:遍历数组、集合。

  • 原理:用于调用数组的每个元素,并将元素传递给回调函数。

2、语法

array.forEach(callbackFn(currentValue, index, arr), thisValue)

其他形式的语法格式:

// 箭头函数
forEach((element) => { /* … */ })
forEach((element, index) => { /* … */ })
forEach((element, index, array) => { /* … */ })

// 回调函数
forEach(callbackFn)
forEach(callbackFn, thisArg)

// 内联回调函数
forEach(function(element) { /* … */ })
forEach(function(element, index) { /* … */ })
forEach(function(element, index, array){ /* … */ })
forEach(function(element, index, array) { /* … */ }, thisArg)

3、语法分析

  1. array:被遍历的数组名
  2. forEach:forEach方法的方面名
  3. callbackFn:数组中每个元素需要调用的函数。(必选)
  4. currentValue:当前元素(必选)
  5. index:当前元素的索引值(可选)
  6. arr:当前元素的所属的数组对象(可选)
  7. thisValue:传递给函数的值一般用 "this" 值。如果这个参数为空, "undefined" 会传递给 "this" 值(可选)

4、实际应用

代码演示

<body>
    <p id="demo"></p>
    <script>
      //获取元素对象
      demo = document.getElementById("demo");
      //声明一个被遍历的数组
      let numbers = [3, 8, 2, 9];
      //应用forEath语法遍历
      numbers.forEach(function (item, index) {
        //获取元素对象的内容,并放入被遍历的值
        demo.innerHTML =
          demo.innerHTML + "index[" + index + "]: " + item + "<br>";
      });
    </script>
  </body>

效果图 

5、注意事项

  1. foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本

  2. foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思

  3. await 不能用在 forEach 中:原因:那就是 forEach 只支持同步代码

  4. forEach 循环无法中途跳出,break 命令或 return 命令都不能奏效

  5. forEach(): 没有返回值,本质上等同于 for 循环,对每一项执行 function 函数。即map是返回一个新数组,原数组不变,forEach 是不改变原数组(尽管回调函数 callbackFn 在被调用时可能会改变原数组)

  6. 不支持 continue,用 return false 或 return true 代替

  7. 不支持 break,用 try catch/every/some 代替

  8. 实现continue:

    var arr = [1,2,3,4,5];
    var num = 3;
    arr.some(function(v){
        if(v == num) {
            return;  // 
        }
        console.log(v);
    });

    实现break:

    var arr = [1,2,3,4,5]; 
    var num = 3; 
    arr.every(function(v){
        if(v == num) {
            return false;
        }else{ 
            console.log(v); 
            return true;
        }
    });
    
    try {
        var array = ["first","second","third","fourth"];        // 执行到第3次,结束循环
        array.forEach(function(item,index){
            if (item == "third") {
                throw new Error("EndIterative");
            }
            alert(item);// first,sencond
        }); 
    } catch(e) { 
        if(e.message!="EndIterative") throw e; 
    };

6、总结

forEach实用性:

       建议:尽量不要使用forEach; 

       原因:其实也简单,就是为了避免GC,因为forEach会“偷偷”申请内存,使用过度的话自然会引发系统的垃圾收集!

       鉴此,建议大家平日尽量限制使用foreach,转而使用for之类的循环控制语法,尤其注意一下Update(或者说频繁调用的函数)中的foreach使用,不小心的话确实会导致频繁

GC

个人总结:

       虽然forEach遍历的时候更加简洁,效率和for循环相同,不用关心集合下标的问题,减少了出错的效率,但是forEach不能同时遍历多个集合,在遍历的时候无法修改和删除集合数据,方法不能使用break,continue语句跳出循环,或者使用return从函数体返回,对于空数组不会执行回调函数。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值