ES6 Iterator
阿新 • • 發佈:2017-12-13
添加 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