forEach循環裡break使用方式詳解
一. 在forEach裡使用break 會發生什麼
大傢都知道 js 的 forEach裡是不能使用break。但是為什麼不能在forEach裡使用呢?在forEach裡使用break 會發生什麼呢?
紙上得來終覺淺,絕知此事要躬行。要想知道發生什麼,不妨在代碼裡驗證一下。
let arr = [1, 2, 3, 4, 5]; arr.forEach((item, index) => { if (item > 2) { break } console.log(item) }) // SyntaxError: Illegal break statement (非法中斷語句)
在控制臺可以看到輸出:語法錯誤。
二. 為什麼不能在forEach裡使用break
要想知道forEach裡為什麼不能使用break,必須先要搞清楚break的語法。
你真的瞭解break嗎
break 表示中止當前循環。
語法:break [label];
label:與語句標簽相關聯的標識符。如果 break 語句不在一個循環或者Switch語句中,則該項是必須的。
我們看一個例子:
我們平時正常使用時
let arr = [1, 2, 3, 4, 5] for (let i = 0; i < arr.length; i++) { if (arr[i] > 2) { break // 大於2 跳出整個循環 } console.log(arr[i]) // 1, 2 }
break 與語句標簽一起使用時
let arr = [1, 2, 3, 4, 5] outer_block: // 標識最外層循環 for (let i = 0; i < arr.length; i++) { console.log('i', arr[i]) // 1 inner_block: // 標識裡面的for循環 for (let j = 0; j < arr.length; j++) { if (j > 3) { break outer_block // 跳出最外層循環 } console.log('j', arr[j]) // 1, 2, 3, 4 } }
輸出結果:最外層輸出:1,最次層輸出:1,2,3,4。可以看出brake終止循環是有條件的。我們在回來看forEach這個問題。
先看下forEach語法:
forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
是上面的定義相當於:
Array.prototype.forEach = function(callback) { for (let i = 0; i < this.length; i++) { callback(this[i], i, this); } };
可以看出:我們在forEach裡使用break,其實是在callback裡使用break。再明白一點,其實就是相當於你在for循環裡這樣寫:
let arr = [1, 2, 3, 4, 5] outer_block: for (let i = 0; i < arr.length; i++) { console.log('i', arr[i]) inner_block1: (function() { inner_block2: break // 報錯,不能直接使用break })() }
到這裡我想你已經明白瞭為什麼不能在forEach裡使用break瞭。回到本文的題目上來。
三.如何在forEach的循環裡break?
查閱MDN,上面有一個備註:
編輯切換為居中
MDN
在forEach裡合法的使用break
function breakInForEach(arr) { let BreakException = {}; let res = false; try { arr.forEach(item => { if (item === 2) { res = true; throw BreakException; } }) } catch(e) { if (e !== BreakException) throw e } return res; } console.log(foreachBreak([1, 2, 3, 4, 5, 6])); // true
也可以使用every 或者 some等
最推薦的方式呢,就是這種需要break的場景下,直接使用every或者some。
- every: 碰到return false的時候,循環中止,return true 循環繼續;
- some: 碰到return ture的時候,循環中止,return false 循環繼續;
總結
本文介紹瞭為什麼不能在forEach裡使用break;在forEach裡使用break 會發生什麼以及怎樣在forEach裡使用break,更多關於forEach循環break使用的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- JavaScript中forEach的錯誤用法匯總
- js中Array.forEach跳出循環的方法實例
- 梳理總結25JavaScript數組操作方法實例
- JS面試題之forEach能否跳出循環詳解
- Vue必學知識點之forEach()的使用