成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript的Iterator認(rèn)識(shí)

HollisChuang / 680人閱讀

摘要:也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。其中,屬性是當(dāng)前成員的值,屬性是一個(gè)布爾值,表示遍歷是否結(jié)束。屬性本身是一個(gè)函數(shù),就是當(dāng)前數(shù)據(jù)結(jié)構(gòu)默認(rèn)的遍歷器生成函數(shù)。執(zhí)行這個(gè)屬性,會(huì)返回一個(gè)遍歷器對(duì)象。

遍歷器(Iterator)

遍歷器(Iterator)就是這樣一種機(jī)制。它是一種接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問(wèn)機(jī)制。任何數(shù)據(jù)結(jié)構(gòu)只要部署Iterator接口,就可以完成遍歷操作(即依次處理該數(shù)據(jù)結(jié)構(gòu)的所有成員)。
Iterator 的作用有三個(gè):

為各種數(shù)據(jù)結(jié)構(gòu),提供一個(gè)統(tǒng)一的、簡(jiǎn)便的訪問(wèn)接口;

使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按某種次序排列;

ES6創(chuàng)造了一種新的遍歷命令for...of循環(huán),Iterator接口主要供for...of消費(fèi)。

遍歷過(guò)程:

創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。

第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個(gè)成員。

第二次調(diào)用指針對(duì)象的next方法,指針就指向數(shù)據(jù)結(jié)構(gòu)的第二個(gè)成員。

不斷調(diào)用指針對(duì)象的next方法,直到它指向數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置。

每一次調(diào)用next方法,都會(huì)返回?cái)?shù)據(jù)結(jié)構(gòu)的當(dāng)前成員的信息。具體來(lái)說(shuō),就是返回一個(gè)包含value和done兩個(gè)屬性的對(duì)象。其中,value屬性是當(dāng)前成員的值,done屬性是一個(gè)布爾值,表示遍歷是否結(jié)束。

Iterator 接口的實(shí)現(xiàn)

一種數(shù)據(jù)結(jié)構(gòu)只要部署了 Iterator 接口,也就是由next方法,返回的是value和 done屬性,我們就稱這種數(shù)據(jù)結(jié)構(gòu)是”可遍歷的“(iterable)。
ES6 規(guī)定,默認(rèn)的 Iterator 接口部署在數(shù)據(jù)結(jié)構(gòu)的Symbol.iterator屬性,或者說(shuō),一個(gè)數(shù)據(jù)結(jié)構(gòu)只要具有Symbol.iterator屬性,就可以認(rèn)為是“可遍歷的”(iterable)。Symbol.iterator屬性本身是一個(gè)函數(shù),就是當(dāng)前數(shù)據(jù)結(jié)構(gòu)默認(rèn)的遍歷器生成函數(shù)。執(zhí)行這個(gè)函數(shù),就會(huì)返回一個(gè)遍歷器。至于屬性名Symbol.iterator,它是一個(gè)表達(dá)式,返回Symbol對(duì)象的iterator屬性,這是一個(gè)預(yù)定義好的、類型為 Symbol 的特殊值,所以要放在方括號(hào)內(nèi)(參見(jiàn) Symbol 一章)。

const obj = {
  [Symbol.iterator] : function () {  
    //Symbol.iterator是指Symbol對(duì)象的iterator屬性,所以使用其作為obj的屬性名需要使用[]抱起來(lái),
    return {
      next: function () {
        return {
          value: 1,
          done: true
        };
      }
    };
  }
};

上面代碼中,對(duì)象obj是可遍歷的(iterable),因?yàn)榫哂蠸ymbol.iterator屬性。執(zhí)行這個(gè)屬性,會(huì)返回一個(gè)遍歷器對(duì)象。該對(duì)象的根本特征就是具有next方法。每次調(diào)用next方法,都會(huì)返回一個(gè)代表當(dāng)前成員的信息對(duì)象,具有value和done兩個(gè)屬性。
原生具備 Iterator 接口的數(shù)據(jù)結(jié)構(gòu)如下:

Array

Map

Set

String

TypedArray

函數(shù)的 arguments 對(duì)象

NodeList 對(duì)象

閱讀阮老師的es6的隨手筆記:http://es6.ruanyifeng.com/#do...,本文只是記錄下學(xué)習(xí)過(guò)程,會(huì)比只看來(lái)的好點(diǎn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88878.html

相關(guān)文章

  • 從觀察者模式到迭代器模式系統(tǒng)講解 RxJS Observable(一)

    摘要:是的縮寫(xiě),起源于,是一個(gè)基于可觀測(cè)數(shù)據(jù)流結(jié)合觀察者模式和迭代器模式的一種異步編程的應(yīng)用庫(kù)。是基于觀察者模式和迭代器模式以函數(shù)式編程思維來(lái)實(shí)現(xiàn)的。學(xué)習(xí)之前我們需要先了解觀察者模式和迭代器模式,還要對(duì)流的概念有所認(rèn)識(shí)。 RxJS 是 Reactive Extensions for JavaScript 的縮寫(xiě),起源于 Reactive Extensions,是一個(gè)基于可觀測(cè)數(shù)據(jù)流 Stre...

    notebin 評(píng)論0 收藏0
  • 【JS基礎(chǔ)】從JavaScriptfor...of說(shuō)起(上) - iterator 和 gene

    摘要:當(dāng)這個(gè)迭代器的方法被首次后續(xù)調(diào)用時(shí),其內(nèi)的語(yǔ)句會(huì)執(zhí)行到第一個(gè)后續(xù)出現(xiàn)的位置為止,后緊跟迭代器要返回的值。在這個(gè)回調(diào)函數(shù)里,我們使用第一個(gè)請(qǐng)求返回的,再次發(fā)起一個(gè)請(qǐng)求。 寫(xiě)在前面 本文首發(fā)于公眾號(hào):符合預(yù)期的CoyPan 后續(xù)文章:【JS基礎(chǔ)】從JavaScript中的for...of說(shuō)起(下) - async和await 先來(lái)看一段很常見(jiàn)的代碼: const arr = [1, 2, ...

    wslongchen 評(píng)論0 收藏0
  • es6 generator函數(shù)

    摘要:返回的遍歷器對(duì)象可以依次遍歷函數(shù)內(nèi)部的每一個(gè)狀態(tài)。示例內(nèi)部捕獲外部捕獲內(nèi)部捕獲外部捕獲上面代碼遍歷器對(duì)象連續(xù)拋出兩個(gè)錯(cuò)誤,第一個(gè)被函數(shù)體內(nèi)的捕獲。上面代碼中,首先執(zhí)行函數(shù),獲取遍歷器對(duì)象,然后使用方法第二行,執(zhí)行異步任務(wù)的第一階段。 參考 來(lái)源《ecmascript6 入門(mén)》generator部分 認(rèn)識(shí)generator函數(shù) 形式上,generator函數(shù)有兩個(gè)特點(diǎn):一是functio...

    voidking 評(píng)論0 收藏0
  • 詳解NodeList 和 HTMLCollection 和 Array

    摘要:展開(kāi)的屬性后發(fā)現(xiàn),繼承于一個(gè)對(duì)象,而這個(gè)對(duì)象又繼承于對(duì)象。這證實(shí)了我們對(duì)的猜想。是比較新的模型,相比更加完善,不光有元素,還有節(jié)點(diǎn)和。關(guān)于,和的關(guān)系,就是長(zhǎng)得像,有個(gè)別相似的功能,但是是完全不一樣的東西。 Array,NodeList, HTMLCollection這三個(gè)概念和它們之間的關(guān)系有很多做了幾年前端的同學(xué)都搞不清楚,經(jīng)常遇到但是又感覺(jué)很陌生,剪不斷理還亂的感覺(jué)。今天咱們就來(lái)理...

    xietao3 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<