Iterator 和 for...of循環
在ES6中新增了Set和Map兩種數據結構,再加上JS之前原有的數據和對象,這樣就有了四種數據集合,平時還可以組合使用它們,定義自己的數據結構,比如數組的成員是Map,Map的成員是對象等,這樣就需要一種同一的接口機制,來處理所有不同的數據結構。
Interator就是這樣的一種機制,它是一種接口,爲各種不同的數據結構提供同一的訪問機制,任何數據結構只要部署Iterator接口,就可以完成遍歷操作,而且這種遍歷操作是 依次 處理該數據結構的所有成員
Iterator遍歷的作用:
爲各種數據結構提供一個統一的簡便的訪問接口
似的數據結構的成員能夠按某種次序排列
ES6新增了遍歷命令for...of循環,Iterator接口主要提供for...of消費
1.Iterator接口
const arr = [1,2,3];
function iterator(arr){
let index = 0;
return{
next:function(){
return index<arr.length?{value:arr[index++],done:false}:{value:undefined,done:true};
}
}
}
const it = iterator(arr);
console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(it.next()); // 遍歷完成後返回false
2.Iterator的遍歷過程
創建一個指針對象,指向當前數據結構的起始位置,也就是說,遍歷器獨享本質上就是一個指針對象
第一次調用指針對象的next方法,可以將指針只向數據結構的第一個成員
第二次調用指針對象的next方法。指針就指向數據結構的第二個成員
不能調用指針對象的next方法,直到它指向數據結構的結束位置
每一次調用next方法,都會返回數據結構的當前成員的信息,具體來說,就是返回個包含value和done兩個屬性的對象。其中,value屬性是當前成員的值,done屬性是一個布爾信息,表示遍歷是否結束(遍歷過程中,done爲true,遍歷完成done爲false)
凡是具有Symbol.iterator 屬性的數據結構都只有 Iterator 接口