什麼是迭代器
迭代器是一種特殊物件,它具有一些專門為迭代過程設計的專有介面,所有的迭代器物件都有乙個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...