js-ES6學習筆記-Iterator

來源:互聯網
上載者:User

標籤:set   接受   迴圈   val   blog   rabl   數組   for   筆記   

1、遍曆器(Iterator)是一種介面,為各種不同的資料結構提供統一的訪問機制。任何資料結構只要部署Iterator介面,就可以完成遍曆操作(即依次處理該資料結構的所有成員)。

2、Iterator的作用有三個:一是為各種資料結構,提供一個統一的、簡便的提供者;二是使得資料結構的成員能夠按某種次序排列;三是ES6創造了一種新的遍曆命令for...of迴圈,Iterator介面主要供for...of消費。

3、在ES6中,有些資料結構原生具備Iterator介面(比如數組),即不用任何處理,就可以被for...of迴圈遍曆,有些就不行(比如對象)。原因在於,這些資料結構原生部署了Symbol.iterator屬性(詳見下文),另外一些資料結構沒有。凡是部署了Symbol.iterator屬性的資料結構,就稱為部署了遍曆器介面。調用這個介面,就會返回一個遍曆器對象。

4、在ES6中,有三類資料結構原生具備Iterator介面:數組、某些類似數組的對象、Set和Map結構。

5、一個為對象添加Iterator介面的例子。

let obj = {  data: [ ‘hello‘, ‘world‘ ],  [Symbol.iterator]() {    const self = this;    let index = 0;    return {      next() {        if (index < self.data.length) {          return {            value: self.data[index++],            done: false          };        } else {          return { value: undefined, done: true };        }      }    };  }};

6、下面是類似數組的對象調用數組的Symbol.iterator方法的例子。

let iterable = {  0: ‘a‘,  1: ‘b‘,  2: ‘c‘,  length: 3,  [Symbol.iterator]: Array.prototype[Symbol.iterator]};for (let item of iterable) {  console.log(item); // ‘a‘, ‘b‘, ‘c‘}

注意,普通對象部署數組的Symbol.iterator方法,並無效果。

7、有一些場合會預設調用Iterator介面(即Symbol.iterator方法),除了下文會介紹的for...of迴圈,還有幾個別的場合。

  • 解構賦值
  • 擴充運算子(...)
  • yield*_yield*後面跟的是一個可遍曆的結構,它會調用該結構的遍曆器介面。
  • 由於數組的遍曆會調用遍曆器介面,所以任何接受數組作為參數的場合,其實都調用

8、字串是一個類似數組的對象,也原生具有Iterator介面。

9、遍曆器對象除了具有next方法,還可以具有return方法和throw方法。如果你自己寫遍曆器對象產生函數,那麼next方法是必須部署的,return方法和throw方法是否部署是可選的。

js-ES6學習筆記-Iterator

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.