亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁(yè) > IT技術(shù) > 其他 > 正文

              (面試題) 面試官:如何在forEach的循環(huán)里使用break
              2022-08-29 23:55:46


              (面試題) 面試官:如何在forEach的循環(huán)里使用break_javascript

              大家都知道 js 的 forEach里是不能使用break。但是為什么不能在forEach里使用呢?在forEach里使用break 會(huì)發(fā)生什么呢?

              一. 在forEach里使用break 會(huì)發(fā)生什么

              紙上得來(lái)終覺淺,絕知此事要躬行。要想知道發(fā)生什么,不妨在代碼里驗(yàn)證一下。

              let arr = [1, 2, 3, 4, 5];

              arr.forEach((item, index) => {
              if (item > 2) {
              break
              }
              console.log(item)
              })

              // SyntaxError: Illegal break statement (非法中斷語(yǔ)句)

              在控制臺(tái)可以看到輸出:語(yǔ)法錯(cuò)誤。

              二. 為什么不能在forEach里使用break

              要想知道forEach里為什么不能使用break,必須先要搞清楚break的語(yǔ)法。

              你真的了解break嗎

              break 表示中止當(dāng)前循環(huán)。

              語(yǔ)法:break [label];

              label:與語(yǔ)句標(biāo)簽相關(guān)聯(lián)的標(biāo)識(shí)符。如果 break 語(yǔ)句不在一個(gè)循環(huán)或者Switch語(yǔ)句中,則該項(xiàng)是必須的。

              我們看一個(gè)例子:

              我們平時(shí)正常使用時(shí)

              let arr = [1, 2, 3, 4, 5]

              for (let i = 0; i < arr.length; i++) {
              if (arr[i] > 2) {
              break // 大于2 跳出整個(gè)循環(huán)
              }
              console.log(arr[i]) // 1, 2
              }

              break 與語(yǔ)句標(biāo)簽一起使用時(shí)

              let arr = [1, 2, 3, 4, 5]

              outer_block: // 標(biāo)識(shí)最外層循環(huán)
              for (let i = 0; i < arr.length; i++) {
              console.log('i', arr[i]) // 1
              inner_block: // 標(biāo)識(shí)里面的for循環(huán)
              for (let j = 0; j < arr.length; j++) {
              if (j > 3) {
              break outer_block // 跳出最外層循環(huán)
              }
              console.log('j', arr[j]) // 1, 2, 3, 4
              }
              }

              輸出結(jié)果:最外層輸出:1,最次層輸出:1,2,3,4。可以看出brake終止循環(huán)是有條件的。我們?cè)诨貋?lái)看forEach這個(gè)問題。

              先看下forEach語(yǔ)法:

              forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;

              是上面的定義相當(dāng)于:

              Array.prototype.forEach = function(callback) {
              for (let i = 0; i < this.length; i++) {
              callback(this[i], i, this);
              }
              };

              可以看出:我們?cè)趂orEach里使用break,其實(shí)是在callback里使用break。再明白一點(diǎn),其實(shí)就是相當(dāng)于你在for循環(huán)里這樣寫:

              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 // 報(bào)錯(cuò),不能直接使用break
              })()
              }

              到這里我想你已經(jīng)明白了為什么不能在forEach里使用break了。回到本文的題目上來(lái)。

              如何在forEach的循環(huán)里break?

              查閱MDN,上面有一個(gè)備注:

              (面試題) 面試官:如何在forEach的循環(huán)里使用break_開發(fā)語(yǔ)言_02


              編輯切換為居中

              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的場(chǎng)景下,直接使用every或者some。

              • every: 碰到return false的時(shí)候,循環(huán)中止,return true 循環(huán)繼續(xù);
              • some: 碰到return ture的時(shí)候,循環(huán)中止,return false 循環(huán)繼續(xù);

              總結(jié)

              本文介紹了為什么不能在forEach里使用break;在forEach里使用break 會(huì)發(fā)生什么以及怎樣在forEach里使用break。

              ?

              本文摘自 :https://blog.51cto.com/u

              開通會(huì)員,享受整站包年服務(wù)立即開通 >