<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          for...in和for...of的介紹及區(qū)別

          共 2557字,需瀏覽 6分鐘

           ·

          2021-10-12 11:55

          for...in

          任意順序遍歷一個對象自有的、繼承的、可枚舉[1]的、非Symbol的屬性。對于每個不同的屬性,語句都會被執(zhí)行(MDN)

          簡單來說下圖:就是for...in是無序遍歷,有可能遍歷數(shù)組的時候,不能保證順序是正常的取出來。所以不推薦用for...in遍歷數(shù)組類型值

          for...in循環(huán)有幾個缺點[2]

          1. 數(shù)組的鍵名是數(shù)字,但是for...in循環(huán)是以字符串作為鍵名"0"、"1"、"2"等等。
          2. for...in循環(huán)不僅遍歷數(shù)字鍵名,還會遍歷手動添加的其他鍵,甚至包括原型鏈上的鍵。
          3. 某些情況下,for...in循環(huán)會以任意順序遍歷鍵名。
          4. for...in循環(huán)只能獲得對象的鍵名,不能直接獲取鍵值
          盡量不要用for in遍歷數(shù)組

          集合遍歷的效率為:hash > for(;;) > for...in
          集合相關操作首選對象,次之用for循環(huán)遍歷。

          for...of

          for...of是遍歷所有數(shù)據(jù)結構的統(tǒng)一的方法,但是只能遍歷具有iterator迭代接口的值。因for...of循環(huán)內部調用的是數(shù)據(jù)結構的Symbol.iterator方法。

          for...of循環(huán)可以使用的范圍包括:

          數(shù)組、Set 和 Map 結構、某些類似數(shù)組的對象(比如arguments對象、DOM NodeList 對象)、后文的 Generator 對象,以及字符串。

          原生Object沒有這個接口,默認是不能用for...of進行遍歷的,會報錯:

          不同點

          • for...in可以遍歷對象,for...of不可以;
          • for...in循環(huán)讀取鍵名,for...of循環(huán)讀取鍵值;
          • for...in不適用于遍歷數(shù)組,原因如下一條。
          • for...of循環(huán)調用遍歷器接口,這一點跟for...in循環(huán)也不一樣。所以遍歷數(shù)字集合的數(shù)組時,for...in返回字符串,for...of返回的是數(shù)字。

          • let arr = [35];

            for (let i in arr) {
              console.log(i); // 字符串類型的鍵名:'0', '1'
            }

            for (let i of arr) {
              console.log(i); // 數(shù)字類型的值:3, 5
            }

          性能比較:

          for/while > forEach等(函數(shù)式編程+for) > for...of > for...in

          參考資料

          [1]

          可枚舉的: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Enumerability_and_ownership_of_properties

          [2]

          es6文檔關于for...in相關知識: https://es6.ruanyifeng.com/#docs/iterator#for---of-%E5%BE%AA%E7%8E%AF




          愿你歷盡千帆,歸來仍是少年。


          讓我們一起攜手同走前端路!

          關注公眾號回復【加群】即可

          ● 工作中常見頁面布局的n種實現(xiàn)方法

          ● 三欄響應式布局(左右固寬中間自適應)的5種方法

          ● 兩欄自適應布局的n種實現(xiàn)方法匯總

          ● 工作中常見的兩欄布局案例及分析

          ● 垂直居中布局的一百種實現(xiàn)方式

          ● 常用九宮格布局的幾大方法匯總

          ● 為什么操作DOM會影響WEB應用的性能?

          ● 移動端滾動穿透的6種解決方案

          ● Vue + TypeScript 踩坑總結

          瀏覽 72
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久性网 | 美女黄色裸体网站 | 做爱网站免费入口观看 | 北条麻妃九九九在线视频 | 中文在线观看一区二区三区四区 |