ECMAScript6(三)

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 接口


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章