<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScriptES6的迭代器與生成器介紹

        來源:懂視網 責編:小OO 時間:2020-11-27 20:14:13
        文檔

        JavaScriptES6的迭代器與生成器介紹

        本文介紹了深入理解ES6的迭代器與生成器,分享給大家,具體如下:循環語句的問題;;在ES6之前,這種標準的for循環,通過變量來跟蹤數組的索引。如果多個循環嵌套就需要追蹤多個變量,代碼復雜度會大大增加,也容易產生錯用循環變量的bug。迭代器的出現旨在消除這種復雜性并減少循環中的錯誤。什么是迭代器;我們先感受一下用ES5語法模擬創建一個迭代器。;以上,我們通過調用createIterator()函數,返回一個對象,這個對象存在一個next()方法,當next()方法被調用時,返回格式{ value: 1.done: false}的結果對象。因此,可以這么定義:迭代器是一個擁有next()方法的特殊對象,每次調用next()都返回一個結果對象。
        推薦度:
        導讀本文介紹了深入理解ES6的迭代器與生成器,分享給大家,具體如下:循環語句的問題;;在ES6之前,這種標準的for循環,通過變量來跟蹤數組的索引。如果多個循環嵌套就需要追蹤多個變量,代碼復雜度會大大增加,也容易產生錯用循環變量的bug。迭代器的出現旨在消除這種復雜性并減少循環中的錯誤。什么是迭代器;我們先感受一下用ES5語法模擬創建一個迭代器。;以上,我們通過調用createIterator()函數,返回一個對象,這個對象存在一個next()方法,當next()方法被調用時,返回格式{ value: 1.done: false}的結果對象。因此,可以這么定義:迭代器是一個擁有next()方法的特殊對象,每次調用next()都返回一個結果對象。

        本篇文章主要介紹了深入理解ES6的迭代器與生成器,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

        本文介紹了深入理解ES6的迭代器與生成器,分享給大家,具體如下:

        循環語句的問題

        在ES6之前,這種標準的for循環,通過變量來跟蹤數組的索引。如果多個循環嵌套就需要追蹤多個變量,代碼復雜度會大大增加,也容易產生錯用循環變量的bug。

        迭代器的出現旨在消除這種復雜性并減少循環中的錯誤。

        什么是迭代器

        我們先感受一下用ES5語法模擬創建一個迭代器:

        以上,我們通過調用createIterator()函數,返回一個對象,這個對象存在一個next()方法,當next()方法被調用時,返回格式{ value: 1, done: false}的結果對象。

        因此,我們可以這么定義:迭代器是一個擁有next()方法的特殊對象,每次調用next()都返回一個結果對象。

        借助這個迭代器對象,我們來改造剛開始那個標準的for循環【暫時先忘記ES6的for-of循環新特性】:

        what,消除循環變量而已,需要搞這么麻煩,代碼上不是得不償失了嗎?

        并非如此,畢竟createIterator()只需寫一次,就可以一直復用。不過ES6引入了生成器對象,可以讓創建迭代器的過程變得更加簡單。

        什么是生成器

        生成器是一種返回迭代器的函數,通過function關鍵字后的星號(*)來表示,函數中會用到新的關鍵字yield。

        上面,我們用ES6的生成,大大簡化了迭代器的創建過程。我們給生成器函數createIterator()傳入一個items數組,函數內部,for循環不斷從數組中生成新的元素放入迭代器中,每遇到一個yield語句循環都會停止;每次調用迭代器的next()方法,循環便繼續運行并停止在下一條yield語句處。

        生成器的創建方式

        生成器是個函數:

        可以用函數表達式方式書寫:

        也可以添加到對象中,ES5風格對象字面量:

        ES6風格的對象方法簡寫方式:

        可迭代對象

        在ES6中,所有的集合對象(數組、Set集合及Map集合)和字符串都是可迭代對象,可迭代對象都綁定了默認的迭代器。

        來了來了,姍姍來遲的ES6循環新特性for-of:

        for-of循環,可作用在可迭代對象上,正是利用了可迭代對象上的默認迭代器。大致過程是:for-of循環每執行一次都會調用可迭代對象的next()方法,并將迭代器返回的結果對象的value屬性存儲在變量中,循環將繼續執行這一過程直到返回對象的done屬性的值為true。

        如果只需要迭代數組或集合中的值,用for-of循環代替for循環是個不錯的選擇。

        訪問默認迭代器

        可迭代對象,都有一個Symbol.iterator方法,for-of循環時,通過調用colors數組的Symbol.iterator方法來獲取默認迭代器的,這一過程是在JavaScript引擎背后完成的。

        我們可以主動獲取一下這個默認迭代器來感受一下:

        在這段代碼中,通過Symbol.iterator獲取了數組values的默認迭代器,并用它遍歷數組中的元素。在JavaScript引擎中執行for-of循環語句也是類似的處理過程。

        用Symbol.iterator屬性來檢測對象是否為可迭代對象:

        創建可迭代對象

        當我們在創建對象時,給Symbol.iterator屬性添加一個生成器,則可以將其變成可迭代對象:

        內建迭代器

        ES6中的集合對象,數組、Set集合和Map集合,都內建了三種迭代器:

      1. entries() 返回一個迭代器,其值為多個鍵值對。如果是數組,第一個元素是索引位置;如果是Set集合,第一個元素與第二個元素一樣,都是值。

      2. values() 返回一個迭代器,其值為集合的值。

      3. keys() 返回一個迭代器,其值為集合中的所有鍵名。如果是數組,返回的是索引;如果是Set集合,返回的是值(Set的值被同時用作鍵和值)。

      4. 不同集合的默認迭代器

        每個集合類型都有一個默認的迭代器,在for-of循環中,如果沒有顯式指定則使用默認的迭代器。按常規使用習慣,我們很容易猜到,數組和Set集合的默認迭代器是values(),Map集合的默認迭代器是entries()。

        請看以下示例:

        這段代碼會輸入以下內容:

        "red"
        "green"
        "blue"
        1234
        5678
        9012
        ["title", "Understanding ECMAScript 6"]
        ["format", "print"]

        for-of循環配合解構特性,操縱數據會更方便:

        展開運算符操縱可迭代對象

        展開運算符可以操作所有的可迭代對象,并根據默認迭代器來選取要引用的值,從迭代器讀取所有值。然后按返回順序將它們依次插入到數組中。因此如果想將可迭代對象轉換為數組,用展開運算符是最簡單的方法。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScriptES6的迭代器與生成器介紹

        本文介紹了深入理解ES6的迭代器與生成器,分享給大家,具體如下:循環語句的問題;;在ES6之前,這種標準的for循環,通過變量來跟蹤數組的索引。如果多個循環嵌套就需要追蹤多個變量,代碼復雜度會大大增加,也容易產生錯用循環變量的bug。迭代器的出現旨在消除這種復雜性并減少循環中的錯誤。什么是迭代器;我們先感受一下用ES5語法模擬創建一個迭代器。;以上,我們通過調用createIterator()函數,返回一個對象,這個對象存在一個next()方法,當next()方法被調用時,返回格式{ value: 1.done: false}的結果對象。因此,可以這么定義:迭代器是一個擁有next()方法的特殊對象,每次調用next()都返回一個結果對象。
        推薦度:
        標簽: js 生成器 javascript
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 中文成人久久久久影院免费观看| 亚洲三级在线免费观看| 国产亚洲精彩视频| 精品久久久久久久久免费影院| 亚洲无删减国产精品一区| 美女视频黄的免费视频网页| 亚洲日韩v无码中文字幕| 视频免费在线观看| 亚洲AV成人一区二区三区AV| 最近2019免费中文字幕6| 亚洲精品中文字幕无乱码| 久草视频免费在线观看| 亚洲最大天堂无码精品区| 日本免费一区二区三区最新vr| 亚洲av无码成人精品国产| 免费看国产一级特黄aa大片| 人成电影网在线观看免费| 亚洲无码在线播放| 99re免费99re在线视频手机版| 亚洲成人免费网址| 日本午夜免费福利视频| 牛牛在线精品观看免费正| 亚洲中文字幕久久精品无码喷水| 少妇太爽了在线观看免费视频| 亚洲国产精品白丝在线观看| 在线观看免费a∨网站| 免费在线观看自拍性爱视频| 国产精品亚洲а∨无码播放| 9420免费高清在线视频| 亚洲人片在线观看天堂无码| 亚洲va中文字幕无码| 国产白丝无码免费视频| 亚洲一级在线观看| 亚洲国产小视频精品久久久三级| 久久青青草原国产精品免费| 亚洲伦理中文字幕| 久久亚洲AV永久无码精品| 麻豆高清免费国产一区| 男男gay做爽爽的视频免费| 亚洲avav天堂av在线不卡| 日本成人在线免费观看|