<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
大家都知道 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,必須先要搞清楚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了。回到本文的題目上來。
查閱MDN,上面有一個備註:
編輯切換為居中
MDN
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
最推薦的方式呢,就是這種需要break的場景下,直接使用every或者some。
本文介紹了為什麼不能在forEach裡使用break;在forEach裡使用break 會發生什麼以及怎樣在forEach裡使用break,更多關於forEach迴圈break使用的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45