课程视频--如何打断forEach循环使用for循环时,可以使用break或return语句结束for循环(return直接结束函数),但是使用forEach循环如何跳出循环呢?尝试使用break和return首先尝试使用return语句----没有效果[1,2,3,4,5].forEach(item=>{if(item===2){return}console.log(item);})MDN官方给出的解释为什么会这样?先看官方文档的描述。MDN文档明确指出forEach循环不能退出。引用自MDN除了抛出异常之外,没有其他方法可以停止或中断forEach()循环。如果您需要这样的行为,forEach()方法是错误的工具。注意:除了抛出异常之外,没有办法停止或跳出forEach()循环。如果你需要这个,那么使用forEach()方法是错误的。如果需要提前终止循环,可以使用:简单循环for...of循环Array.prototype.every()Array.prototype.some()Array.prototype.find()Array.prototype.findIndex()探索为什么break用return不行,先看看为什么return没有作用,break报错,forEach的实现可以用代码表示如下:constarr=[1,2,3,4,5];for(leti=0;i2)returnfalse;})(arr[i])}使用return语句相当于将返回值复制到自执行函数中的rs中,但实际上并不影响整个函数。使用break语句报错是因为break语句在JS解释器中不能出现在函数体中。如何跳出forEach循环MDN官方推荐的方法//every遇到returnfalse,中止循环。当一些遇到returnture时,它??会中止循环。vara=[1,2,3,4,5]a.every(item=>{console.log(item);//输出:1,2if(item===2){returnfalse}else{returntrue}})vara=[1,2,3,4,5]a.some(item=>{console.log(item);//output:1,2if(item===2){returntrue}else{returnfalse}})其他方法1.使用for循环或forin循环代替2.使用throw抛出异常try{[1,2,3,4,5].forEach(function(item){if(item===2)throwitem;console.log(item);});}catch(e){}3.使用判断运行空循环vartag;[1,2,3,4,5].forEach(function(item){if(!tag){console.log(item);if(item===2){tag=true;}}这样做有两个问题,第一个问题是全局增加一个标记变量,第二个问题,表面上是终止forEach循环,但实际上循环次数并没有改变,只是在条件不满足时回调不执行任何东西,我们来解决第一个问题第一,如何删除全局下新增的标签变量,其实forEach还有第二个参数,表示回调的执行上下文,也就是回调中this对应的值。因此,我们可以将上下文设置为一个空对象。This对象自然没有tag属性,所以访问this.tag时,会得到undefined[1,2,3,4,5].forEach(function(item){if(!this.tag){console.日志(项目);如果(项目===2){this.tag=true;}}},{})4。修改索引vararray=[1,2,3,4,5]array.forEach(item=>{if(item==2){array=array.splice(0);}console.log(item);})解释:forEach的执行细节1.遍历的范围在first第一次执行回调时已经确定,所以执行过程中推送内容不会影响遍历次数。这与for循环非常不同。下面两种情况,一种会导致死循环,一种不会vararr=[1,2,3,4,5]//会导致死循环的代码for(vari=0;iarr.push('a'))2.如果已经存在的值发生变化,则传递的值tocallback就是forEach遍历它们那一刻的值。vararr=[1,2,3,4,5];arr.forEach((item,index)=>{console.log(`time${index}`)arr[index+1]=`${index}a`;console.log(item)})3.删除的item不会遍历。如果访问的元素在迭代时被移除(例如使用shift()),后续元素将被跳过。vararr=[1,2,3,4,5];arr.forEach((item,index)=>{console.log(item)if(item===2){arr.length=index;}})满足条件就截掉后面的值,下次循环没有达到对应的值就循环结束,但是这个操作会破坏原来的数据,所以我们可以用一个小技巧来改变数组从0开始截断,然后重新赋值给数组,即array=array.splice(0)原版高清视频下载视频讲解--提取码:558xQQ问答交流群:600633658本站链接:知乎掘金今日头条新浪微博前端Web思维简书B站