ES6 Iterator

是什么

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

作用
  • 為各種數(shù)據(jù)結(jié)構(gòu),提供一個統(tǒng)一的、簡便的訪問接口
  • 使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按某種次序排列
  • ES6 創(chuàng)造了一種新的遍歷命令for...of循環(huán),Iterator 接口主要供for...of消費(fèi)
默認(rèn)Iterator 接口

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

特征
  • 根本特征:一種指針對象,具有next方法。每次調(diào)用next方法,都會返回一個代表當(dāng)前成員的信息對象,具有valuedone兩個屬性。value屬性是當(dāng)前成員的值,done屬性是一個布爾值,表示遍歷是否結(jié)束。
  • 除了具有next方法,還可以具有return方法和throw方法。
    • 如果自己寫遍歷器對象生成函數(shù),next方法必須部署,returnthrow方法可選部署。return()方法必須返回一個對象,這是 Generator語法決定的。
      return方法的使用場合:
      • for...of循環(huán)提前退出(通常是因為出錯,或者有break語句)
      • 一個對象在完成遍歷前,需要清理或釋放資源
    • throw()方法主要是配合 Generator 函數(shù)使用,一般的遍歷器對象用不到這個方法。
最簡單實現(xiàn)

使用 Generator 函數(shù),只要用 yield 命令給出每一步的返回值即可。

let obj = {
  * [Symbol.iterator]() {
    yield 'hello';
    yield 'world';
  }
};

for (let x of obj) {
  console.log(x);
}
內(nèi)置類型
  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函數(shù)的 arguments 對象
  • NodeList對象
場景
  • 解構(gòu)賦值:默認(rèn)調(diào)用
  • 擴(kuò)展運(yùn)算符(...)
  • yield*
  • 其他任何接受數(shù)組作為參數(shù)的場合
    • for...of
    • Array.from()
    • Map(), Set(), WeakMap(), WeakSet()(比如new Map([['a',1],['b',2]]))
    • Promise.all()
    • Promise.race()
參考文章

Symbol.iterator
ES6 入門 Iterator 和 for...of 循環(huán)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Iterator(遍歷器)的概念 JavaScript原有的表示“集合”的數(shù)據(jù)結(jié)構(gòu),主要是數(shù)組(Array)和對象...
    呼呼哥閱讀 4,543評論 0 2
  • 迭代的英文是 “iteration”,源自拉丁文 “itero”,是“重復(fù)”或“再來”的意思。在軟件開發(fā)領(lǐng)域,“迭...
    越前君閱讀 1,281評論 0 3
  • 一、概念 遍歷器(Iterator)主要就是為了向JavaScript中的數(shù)組(Array)和對象(Object)...
    HalShaw閱讀 448評論 0 0
  • 1、遍歷器(Iterator)是一種接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問機(jī)制。任何數(shù)據(jù)結(jié)構(gòu)只要部署Iterat...
    小龍蝦Julian閱讀 452評論 0 1
  • 前言 日常開發(fā)經(jīng)常用到的遍歷,es6其中一章單獨(dú)討論了Iterator但對其概念很模糊,因此想深入研究下。 基礎(chǔ)概...
    AmazRan閱讀 268評論 0 0

友情鏈接更多精彩內(nèi)容