1. 程式人生 > >ES6 Iterator

ES6 Iterator

添加 type code ons mbo 屬性 相同 bsp del

1、概述

Iterator 的作用有三個:一是為各種數據結構,提供一個統一的、簡便的訪問接口;二是使得數據結構的成員能夠按某種次序排列;三是 ES6 創造了一種新的遍歷命令for...of循環,Iterator 接口主要供for...of循環

2、Iterator 接口

ES6 的有些數據結構原生具備 Iterator 接口(比如數組),即不用任何處理,就可以被for...of循環遍歷。原因在於,這些數據結構原生部署了Symbol.iterator屬性,另外一些數據結構沒有(比如對象)。凡是部署了Symbol.iterator屬性的數據結構,就稱為部署了遍歷器接口。調用這個接口,就會返回一個遍歷器對象。

原生具備 Iterator 接口的數據結構如下。

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函數的 arguments 對象
  • NodeList 對象

3、只要某個數據結構部署了 Iterator 接口,就可以對它使用擴展運算符,將其轉為數組。

let arr = [...iterable];

4、for...of

JavaScript 原有的for...in循環,只能獲得對象的鍵名,不能直接獲取鍵值。ES6 提供for...of循環,允許遍歷獲得鍵值。

var arr = [‘a‘, ‘b‘, ‘c‘, ‘d‘];

for
(let a in arr) { console.log(a); // 0 1 2 3 } for (let a of arr) { console.log(a); // a b c d }
  • Set 結構和 Map 結構=遍歷的順序是按照各個成員被添加進數據結構的順序。其次,Set 結構遍歷時,返回的是一個值,而 Map 結構遍歷時,返回的是一個數組,該數組的兩個成員分別為當前 Map 成員的鍵名和鍵值。
  • entries() 返回一個遍歷器對象,用來遍歷[鍵名, 鍵值]組成的數組。對於數組,鍵名就是索引值;對於 Set,鍵名與鍵值相同。Map 結構的 Iterator 接口,默認就是調用entries
    方法。

ES6 Iterator