ES6中的迭代器和生成器

2021-10-07 19:25:34 字數 2435 閱讀 6502

什麼是迭代器

迭代器是一種特殊物件,它具有一些專門為迭代過程設計的專有介面,所有的迭代器物件都有乙個next()方法,每次呼叫都返回乙個結果物件。結果物件有兩個屬性:乙個是value,表示下乙個將要返回的值;另乙個是done,它是乙個布林型別的值,當沒有更多可返回資料時返回true。迭代器還會儲存乙個內部指標,用來指向當前集合中值的位置,每呼叫一次next()方法,都會返回下乙個可用的值。如果在最後乙個值返回後再呼叫next()方法,那麼返回的物件中屬性done的值為true,屬性value若未定義,則為undefined。

產生的原因:

雖然迴圈語句語法簡單,但如果將多個迴圈巢狀,**複雜度會大大增加,一不小心就會導致程式出錯。迭代器的出現旨在消除這種複雜性並減少迴圈中的錯誤

迭代器用法

//在es6中,如果物件具有知名符號屬性 symbol.iterator,則表示物件可以使用迭代

const arr =[1

,2,3

];const iterator = arr[symbol.iterator]()

;//直接建立迭代物件

在es5中運用迭代器

什麼是生成器生成器就是通過建構函式generator建立出來的乙個物件,這個物件既是乙個迭代器,同時又是乙個可迭代的物件。

生成器的使用

生成器還可以這樣建立

let

createiterator

=function

*(items)};

let iterator =

createiterator([

1,2,

3]);

console.

log(iterator.

next()

);console.

log(iterator.

next()

);console.

log(iterator.

next()

);console.

log(iterator.

next()

);

還可以在物件中建立這裡我就不一 一舉例了

注意:不能用foreach,因為yield關鍵字只可在生成器內部使用,在其他地方使用會導致程式丟擲錯誤

function

*createiterator

(items));

}

ES6中的生成器和迭代器

生成器函式generator function 用function name 來宣告,呼叫生成器函式則會返回乙個生成器物件generator,並且符合可迭代協議和迭代器協議,因此generator也是乙個迭代器物件,具有next 方法,呼叫next 方法會執行生成器函式內的語句 即遍歷生成器函式內部...

ES6的迭代器和生成器

在es6之前,遍歷陣列都需要使用for迴圈,通過變數來跟蹤陣列的索引。如果多個迴圈巢狀就需要追蹤多個變數,複雜度會大大增加,也容易產生錯用迴圈變數的bug。es6 引入了乙個全新的迭代器的概念,它提供一種方法能夠順序訪問乙個聚合物件中的各個元素,而不需要暴露該物件的內部表現。es6 對迭代器物件的定...

ES6中的Generator生成器

generator函式,可以通過yield關鍵字,將函式掛起,為了改變執行流提供了可能性,同時為了做非同步程式設計提供了方案 generator函式是分段執行的,yield是暫停執行,next 是恢復執行 1.function後面函式名之前有個 2.只能在函式內部使用yield表示式讓函式掛起,yi...