Symbol.iterator 与 Generator yield
2023-06-05 22:34 muamaker 阅读(24) 评论(0) 收藏 举报
一、当一个对象实现了 Symbol.iterator 方法,就可以被 for of
const obj = {
val:0.,
[Symbol.iterator](){
return {
next(){
return {
value: obj.val++,
done: obj.val > 10 ? true: false
}
}
}
}
}
for(let i of obj){
console.log(i)
}
二、数组天然自带
const arr = [1, 2, 3, 4, 5]; // 获取并调用数组内建的迭代器方法 const itr = arr[Symbol.iterator](); console.log(itr.next()); console.log(itr.next()) console.log(itr.next()) console.log(itr.next()) console.log(itr.next()) console.log(itr.next()) console.log(itr.next())
三、Generator yield
function * It(){
yield 1;
yield 2;
// yield * It();
}
const itr2 = It();
console.log(itr2.next())
console.log(itr2.next())
console.log(itr2.next())
四、模拟数组
// 模拟数组的遍历
let obj2 = {
0:'0',
1:'1',
2:'2',
length: 3,
[Symbol.iterator](){
let index = -1;
let me = this;
let len = me.length;
return {
next(){
index++;
return {
value: index < len ? me[index]:undefined,
done: index >= len
}
}
}
}
}
for(let n of obj2){
console.log('---',n)
}
https://www.cnblogs.com/muamaker/p/8806462.html
浙公网安备 33010602011771号