迭代
生成器是可迭代的。它可以使用 for...of
語句迴圈,並在其他依賴於迭代協議的構造中使用。
function* range(n) {
for (let i = 0; i < n; ++i) {
yield i;
}
}
// looping
for (let n of range(10)) {
// n takes on the values 0, 1, ... 9
}
// spread operator
let nums = [...range(3)]; // [0, 1, 2]
let max = Math.max(...range(100)); // 99
這是使用生成器在 ES6 中自定義可迭代物件的另一個示例。這裡匿名生成器函式 function *
使用。
let user = {
name: "sam", totalReplies: 17, isBlocked: false
};
user[Symbol.iterator] = function *(){
let properties = Object.keys(this);
let count = 0;
let isDone = false;
for(let p of properties){
yield this[p];
}
};
for(let p of user){
console.log( p );
}