语法
arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
参数
callback
为数组中每个元素执行的函数,该函数接收一至三个参数:
currentValue
数组中正在处理的当前元素。
index 可选
数组中正在处理的当前元素的索引。
array 可选
forEach() 方法正在操作的数组。
thisArg 可选
可选参数。当执行回调函数 callback 时,用作 this 的值。
如上图实例可以清楚看到forEach的几个参数的情况,实际使用时
array
和thisArg
使用较少容易忽视
注意: 除了抛出异常以外,没有办法中止或跳出 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
里面的而我们添加的break
或return
只是写在了callback
里面,和for循环并不在同一个作用域所以是不生效的。
forEach() 跳出循环的方法
-
使用 for 循环代替
forEach
(这个很简单这里就不写例子了) -
使用
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("结束了") ;
}
}
- 其他方法
every()
some()
find()
findIndex()
注:只要条件允许,也可以使用 filter() 提前过滤出需要遍历的部分,再用 forEach() 处理。