沒怎麼理解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 } } }