ES6 Iterator和for...of 循環(huán)

Iterator概念

JavaScript原有的表示“集合”的數(shù)據(jù)結(jié)構(gòu),主要是數(shù)組(Array)和對象(Object),es6又添加了MapSet 。這樣就有了四種數(shù)據(jù)集合,而且我們還可以自由的組合使用它們,比如數(shù)組成員中有map,map成員有對象。這樣就需要一種統(tǒng)一接口機(jī)制來處理所有不同的數(shù)據(jù)結(jié)構(gòu)。遍歷器(Iterator)就是這樣一種機(jī)制。他是一種接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問機(jī)制。

任何數(shù)據(jù)結(jié)構(gòu),只要部署了Iterator接口就可以完成遍歷操作(即依次處理該數(shù)據(jù)結(jié)構(gòu)的所有成員)

Iterator 接口的作用

  1. 為各種數(shù)據(jù)結(jié)構(gòu)提供一個統(tǒng)一的、漸變的訪問接口;
  2. 使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按某種測序排列;
  3. for...of(es6遍歷命令)消費。
  1. 創(chuàng)建一個指針對象,指向當(dāng)前位置的起始位置。也就是說,遍歷器對象本質(zhì)上就是一個指針對象。
  2. 第一次調(diào)用指針對象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個成員。
  3. 第二次調(diào)用指針對象的next方法,指針就指向數(shù)據(jù)結(jié)構(gòu)的第二個成員
  4. 不斷調(diào)用指針的next方法,直到它指向數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置

Iterator接口模擬

var it = makeIterator(['a', 'b']);

it.next() // { value: "a", done: false }
it.next() // { value: "b", done: false }
it.next() // { value: undefined, done: true }

function makeIterator(array) {
  var nextIndex = 0;
  return {
    next: function() {
      return nextIndex < array.length ?
        {value: array[nextIndex++], done: false} :
        {value: undefined, done: true};
    }
  };
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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