JavaScript中可以使用forEach跳出循环吗

  介绍

这篇文章给大家介绍JavaScript中可以使用forEach跳出循环吗,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强> forEach使用说明

arr.forEach (function 回调(currentValue,指数,数组),{   ,,,//your 迭代器   }[,thisArg]); <李>

currentValue——当前处理的元素

<李>

指数——当前处理元素的索引

<李>

数组——forEach应用的数组

有一段提示写到了在forEach中打破和返回的用法。原文如下:

没有办法停止或打破一个forEach()循环而不是抛出异常。如果你需要这种行为,theforEach()方法是错误的工具。使用一个简单的循环。如果您正在测试一个谓词的数组元素,需要一个布尔返回值,你可以useevery()或
一些()。如果可用,新methodsfind()或findIndex()可以用于早期终止在真正的谓词。

意思就是说在forEach中使用打破和回报是错误的,如果希望使用打破或者返回请使用每个或者一些函数。

那么回到标题,首先forEach是不能使用任何手段跳出循环的,为什么呢?我们知道forEach接收一个函数,它一般有两个参数,第一个是循环的当前元素,第二个是该元素对应的下标,我们手动实现一下:

Array.prototype.myForEach =, function  (fn), {   ,,,for  (let 小姐:=,0;,小姐:& lt;, this.length;,我+ +),{   ,,,,,,,fn(这我,,我,,);   ,,,}   }

forEach是不是真的这么实现我无从考究,但是以上这个简单的伪代码确实满足forEach的特性,而且也很明显就是不能跳出循环,因为你根本没有办法操作到真正的为循环体。

后来经过查阅文档,发现官方对forEach的定义根本不是我认为的语法糖,它的标准说法是forEach为每个数组元素执行一次你所提供的函数。到这里我的思路逐渐明朗,官方文档也有这么一段话:

除抛出异常之外,没有其他方法可以停止或中断循环。如果您需要这种行为,则该forEach()方法是错误的工具。

使用抛出异常来跳出forEach循环

let  arr =, (0, 1,“stop",, 3,, 4];   try  {   ,,,arr.forEach (element =祝辞,{   ,,,,,,,if  (element ===,“stop"), {   ,,,,,,,,,,,throw  new 错误(“forEachBreak");   ,,,,,,,}   ,,,,,,,console.log(元素),,//,输出,0,1,后面不输出   ,,,});   },catch  (e), {   ,,,console.log (e.message);,//forEachBreak   };

当然,使用try - catch包裹时,当循环体过大性能会随之下降,这是无法避免的,所以抛出异常并不是解决forEach问题的银弹,我们回归到开头写的那段伪代码,我们对它进行一些优化,在真正的为循环中加入对传入函数的判断:

Array.prototype.forEach =, function  (fn), {   ,,,for  (let 小姐:=,0;,小姐:& lt;, this.length;,我+ +),{   ,,,,,,,let  ret =, fn(这我,,我,,);   ,,,,,,,if  (typeof  ret  !==,“undefined",,,, (ret ==, null  | |, ret ==, false)),打破;   ,,,}   }

这样的话自然就能根据返回值来进行循环跳出啦:

let  arr =, (0, 1,“stop",, 3,, 4];      arr.forEach (element =祝辞,{   ,,,if  (element ===, & # 39;停止# 39;),return 错误的   ,,,console.log(元素),,//,输出,0,1,后面不输出   });      console.log(& # 39;返回即为继续:& # 39;);   arr.forEach (element =祝辞,{   ,,,if  (element ===, & # 39;停止# 39;),返回   ,,,console.log(元素),,//,0,1,3,4   });

文档中还提到forEach需要一个同步函数,也就是说在使用异步函数或承诺作为回调时会发生预期以外的结果,所以forEach还是需要慎用或者不要使用,当然这并不意味着项目开发中要一直用简单的对循环去完成一切事情,我们可以在遍历数组时使用. . . .,在遍历对象时使用的……,而官方也在forEach文档下列举了其它一些工具函数:

Array.prototype.find ()   Array.prototype.findIndex ()   Array.prototype.map ()   Array.prototype.filter ()   Array.prototype.every ()   Array.prototype.some ()

关于JavaScript中可以使用forEach跳出循环吗就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

JavaScript中可以使用forEach跳出循环吗