推荐答案
// www.javascriptcn.com code example
const myIterable = {
[Symbol.iterator]() {
let step = 0;
return {
next() {
step++;
if (step === 1) {
return { value: '第一步', done: false };
} else if (step === 2) {
return { value: '第二步', done: false };
} else if (step === 3) {
return { value: '第三步', done: false };
}
return { value: undefined, done: true };
}
};
}
};
for (const step of myIterable) {
console.log(step);
}本题详细解读
什么是迭代器?
迭代器是一种对象,它提供了一种标准的方式来遍历集合中的元素。迭代器对象必须实现 next() 方法,该方法返回一个包含 value 和 done 两个属性的对象。value 表示当前迭代的值,done 是一个布尔值,表示迭代是否完成。
如何创建一个迭代器?
要创建一个迭代器,首先需要定义一个对象,并在该对象上实现 [Symbol.iterator] 方法。这个方法必须返回一个迭代器对象,该迭代器对象必须包含一个 next() 方法。
步骤解析
- 定义迭代器对象:在
[Symbol.iterator]方法中,返回一个包含next()方法的对象。 - 实现
next()方法:next()方法返回一个对象,包含value和done两个属性。value是当前迭代的值,done表示迭代是否完成。 - 使用
for...of循环:for...of循环会自动调用迭代器的next()方法,直到done为true。
示例代码解析
在示例代码中,myIterable 是一个可迭代对象,它实现了 [Symbol.iterator] 方法。该方法返回一个迭代器对象,该对象包含一个 next() 方法。next() 方法通过 step 变量来控制迭代的步骤,每次调用 next() 方法时,step 增加,并根据 step 的值返回不同的 value 和 done。
当 for...of 循环遍历 myIterable 时,它会自动调用 next() 方法,直到 done 为 true,从而输出每一步的值。
总结
通过实现 [Symbol.iterator] 方法和 next() 方法,可以轻松创建一个自定义的迭代器,并使用 for...of 循环来遍历它。