相關 es6 文章:
概念
Iterator -遍歷器。
javascript 中表示‘集合’的數據結構有 數組 對象 Set Map, Iterator 為它們提供了統一訪問接口,即遍歷器(對象),方便遍歷。
部署
ES6 中 Iterator 部署在 Symbol.iterator 屬性中,它返回一個方法,執行該方法就會得到遍歷器對象。
數組(類數組) Set Map 這三種結構都默認部署了 Symbol.iterator 。
遍歷器的使用 (next)
遍歷器對象可以使用 .next() 方法獲取值,返回一個對象:值和done(是否完成)。
// 讓我們使用遍歷器完成數組的遍歷
var arr=[1,2,3];
var iter=arr[Symbol.iterator]();
iter.next(); //{value: 1, done: false}
iter.next(); //{value: 2, done: false}
iter.next(); //{value: 3, done: false}
iter.next(); //{value: undefined, done: true}
注:遍歷器對象還有 return() 和 throw() 方法,一般用不到,不再詳述。
。。等等,什麼鬼?遍歷個數組這麼麻煩!?當然有簡單的
使用 for of 遍歷
以下數據結構都默認部署了 Symbol.iterator:
1. Map Set
2. Array
3. ArrayLike (String arguments NodeList)
使用 for..of... 循環遍歷部署了 Interator 接口的數據結構
//舉幾個常見的栗子
//set
var s=new Set(['a','b','c']);
for(var i of s){
console.log(i);//a b c
}
//map
var m=new Map([['a',1],['b',2]]);
for(var [k,v] of m){
console.log(k);//a b
console.log(v);//1 2
}
//數組
var arr=[1,2,3];
for(var i of arr){
console.log(i);//1 2 3
}
//類數組的遍歷(自己轉的類數組不含遍歷器的不行)
var p=document.getElementsByTagName('p');
for(var i in p){
...
}
注:字符串是一個類數組對象,也有 Iterator 接口;
。。橋豆麻袋,栗子中沒有對象啊,沒錯,默認不能使用 for of !
那麼問題來了,說好的大統一呢?
實際上一來對象的遍歷使用 for in即可,並不需要for of,其次只要給對象加上遍歷器對象就使用 for of 了(不詳述)
Iterator 接口調用的默認調用
1. 解構賦值
解構賦值實際上調用了 Iterator 接口
let s=new Set(['a','b','c']);
let [x,y]=s;
x; //"a"
y; //"b"
2. 擴展運算符
實際上,只要是有 Iterator 接口就可以使用擴展運算符
let str='abc';
[...str] //["a", "b", "c"]
心塞,默默的曬圖
文章到這裡結束,下篇 ☞ Generator
【關注一下不迷路~】
【html】【css】【html】【css】【javascript】【html】【javascript】【css】【javascript】【css】
閱讀更多 全棧前端 的文章