1、概述 Iterator 的作用有三個:一是為各種數據結構,提供一個統一的、簡便的訪問介面;二是使得數據結構的成員能夠按某種次序排列;三是 ES6 創造了一種新的遍歷命令for...of迴圈,Iterator 介面主要供for...of迴圈。 2、Iterator 介面 ES6 的有些數據結構原生 ...
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
方法。