iterator 和 iterable 是 JavaScript 中与迭代相关的两个概念,它们之间有一些关键的区别。
Iterable(可迭代对象):
- 定义: 可迭代对象是实现了
Symbol.iterator方法的对象。这个方法返回一个迭代器对象。 - 特点: 可迭代对象可以被用于
for...of循环,其中迭代器对象负责定义迭代的顺序。 - 示例: 数组、字符串、Map、Set 等都是可迭代对象,因为它们都实现了
Symbol.iterator方法。
let iterableObject = {
[Symbol.iterator]: function () {
// 返回迭代器对象的逻辑
}
};
Iterator(迭代器):
- 定义: 迭代器是一个对象,它实现了
next方法,该方法返回一个包含value和done属性的对象。 - 特点: 迭代器负责跟踪迭代的状态,提供下一个值,并指示迭代是否已经完成。
- 示例: 通过调用可迭代对象的
Symbol.iterator方法获得迭代器对象。
let iteratorObject = {
next: function () {
// 返回 { value, done } 对象的逻辑
}
};
综合起来,一个对象要成为可迭代对象,它需要实现 Symbol.iterator 方法,而这个方法返回一个迭代器对象。迭代器对象则需要实现 next 方法,以便在迭代过程中提供下一个值。
在使用 for...of 循环时,它会自动调用对象的 Symbol.iterator 方法,获取迭代器对象,然后重复调用迭代器对象的 next 方法,直到 done 的值为 true,表示迭代结束。
最后更新于 2023-11-17 16:31:00 by twotwolucky