没怎么理解JavaScript的forEach
方法的童鞋使用forEach
时很容易遇到一个问题就是,当你想要跳出这个循环时,发现return
、break
是不起做用的。下面咱们来分析一下缘由以及解决方法。javascript
首先咱们要知道的是forEach
方法的机制是对数组的每一个有效元素执行一次callback
函数,而后return
、break
等只做用于一个函数,也就形成了没法跳出forEach
循环的问题,而是只能跳过当前函数的执行。java
经过使用抛出异常的方式能够停止。segmentfault
function foo(arr ,item){ var BreakException= {}; try { arr.forEach(function(i) { if(i === item) throw BreakException; console.log(i); }); } catch(e) { if (e!==BreakException) throw e; } }
正常的使用环境:若是是测试一个数组里的元素是否符合某条件,且须要返回一个布尔值则应该使用这两个方法。这里可用于跳出循环。数组
function foo(arr ,item){ arr.some(function(i) { if(i === item) return true; console.log(i); }); }
function foo(arr ,item){ arr.every(function(i) { if(i === item) return false; console.log(i); }); }
若是你须要这样,使用forEach()方法是错误的,你能够用一个简单的循环做为替代。—— MDN
对于多重for循环,咱们跳出循环须要特殊处理一下:函数
xh: //首先将循环命名 for(var i=0;i<10;i++){ for(var j=0;j<5;j++){ if(i==3 && j==4){ break xh; //跳出循环xh } } }