Symbol.iterator 与 Generator yield
2023-06-05 22:34 muamaker 阅读(17) 评论(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