JS forEach循环不能break或return的原因

语法

arr.forEach(callback(currentValue [, index [, array]])[, thisArg])

参数

callback
为数组中每个元素执行的函数,该函数接收一至三个参数:
currentValue
数组中正在处理的当前元素。
index 可选
数组中正在处理的当前元素的索引。
array 可选
forEach() 方法正在操作的数组。
thisArg 可选
可选参数。当执行回调函数 callback 时,用作 this 的值。
在这里插入图片描述

如上图实例可以清楚看到forEach的几个参数的情况,实际使用时arraythisArg使用较少容易忽视
注意: 除了抛出异常以外,没有办法中止或跳出 forEach() 循环。如果你需要中止或跳出循环,forEach() 方法不是应当使用的工具。

JS forEach循环不能break或return的原因

forEach的原理

Array.prototype.myEach = function(callback) {
    
    
    for (var i = 0; i < this.length; i++)
        callback(this[i], i, this);
};

从上面的实现原理可以看出,forEach在使用是其实是回调函数在进行真正的操作,进行数组遍历的for循环是定义在forEach里面的而我们添加的breakreturn只是写在了callback里面,和for循环并不在同一个作用域所以是不生效的。

forEach() 跳出循环的方法

  1. 使用 for 循环代替 forEach(这个很简单这里就不写例子了)

  2. 使用try···catch捕获异常实现

try{
    
    
    var arr=[1,2,3,4,5];
    arr.forEach(function(val,i){
    
    
        if(val == 3){
    
    
            throw new Error("ending");  //抛出错误
        }else{
    
    
            console.log(val);
        }
    })
}catch(e){
    
    
    //其实 catch 中的代码全部注释掉不要都可以
    if(e.message == "ending"){
    
    
        console.log("结束了") ;
    }
}

  1. 其他方法
    every()
    some()
    find()
    findIndex()
    注:只要条件允许,也可以使用 filter() 提前过滤出需要遍历的部分,再用 forEach() 处理。

猜你喜欢

转载自blog.csdn.net/qq_42068550/article/details/118991546