hand
8
_1_11_201
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 20:45:54
在 JavaScript 中,迭代器和生成器是 ES6 引入的强大特性,它们为处理数据集合提供了一种更加灵活和高效的方式。迭代器是实现了迭代器协议的对象,而迭代器协议则定义了一种标准的方式来产生一系列值。本文将深入探讨迭代器的概念、迭代器协议以及如何在 JavaScript 中实现迭代器。
迭代是指按照顺序逐个访问数据集合中的元素的过程。在 JavaScript 中,我们经常需要对数组、对象等数据结构进行遍历操作,这就是迭代的一种常见应用。例如,使用 for
循环遍历数组:
const arr = [1, 2, 3];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
迭代器是一个对象,它实现了迭代器协议。迭代器协议要求对象必须有一个 next()
方法,该方法返回一个包含两个属性的对象:value
和 done
。
value
:表示当前迭代步骤的值。done
:是一个布尔值,true
表示迭代结束,false
表示还有更多值可以迭代。迭代器协议定义了一个对象成为迭代器的标准。具体来说,一个对象要成为迭代器,必须满足以下条件:
next()
方法。next()
方法必须返回一个对象,该对象至少包含 value
和 done
两个属性。下面是一个简单的迭代器示例,用于迭代一个数组:
const arr = [1, 2, 3];
const iterator = {
index: 0,
next: function () {
if (this.index < arr.length) {
return {
value: arr[this.index++],
done: false
};
} else {
return {
value: undefined,
done: true
};
}
}
};
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
我们可以根据需要自定义迭代器。例如,实现一个迭代器来生成斐波那契数列:
const fibonacciIterator = {
a: 0,
b: 1,
next: function () {
const result = this.a;
[this.a, this.b] = [this.b, this.a + this.b];
return {
value: result,
done: false
};
}
};
console.log(fibonacciIterator.next()); // { value: 0, done: false }
console.log(fibonacciIterator.next()); // { value: 1, done: false }
console.log(fibonacciIterator.next()); // { value: 1, done: false }
console.log(fibonacciIterator.next()); // { value: 2, done: false }
可迭代对象是指实现了可迭代协议的对象。可迭代协议要求对象必须有一个 Symbol.iterator
方法,该方法返回一个迭代器。数组、字符串、Set、Map 等内置对象都是可迭代对象。
const arr = [1, 2, 3];
const iterator = arr[Symbol.iterator]();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
for...of
循环遍历可迭代对象for...of
循环是专门用于遍历可迭代对象的语法糖,它会自动调用对象的 Symbol.iterator
方法获取迭代器,并依次调用 next()
方法获取值,直到 done
为 true
。
const arr = [1, 2, 3];
for (const value of arr) {
console.log(value);
}
概念 | 描述 |
---|---|
迭代 | 按照顺序逐个访问数据集合中的元素的过程 |
迭代器 | 实现了迭代器协议的对象,有 next() 方法,返回包含 value 和 done 属性的对象 |
迭代器协议 | 要求对象有 next() 方法,next() 方法返回包含 value 和 done 属性的对象 |
可迭代对象 | 实现了可迭代协议的对象,有 Symbol.iterator 方法,返回一个迭代器 |
for...of 循环 |
专门用于遍历可迭代对象的语法糖 |
迭代器和可迭代对象为 JavaScript 中的数据处理提供了一种更加灵活和统一的方式。通过自定义迭代器,我们可以实现各种复杂的迭代逻辑,而 for...of
循环则让我们可以方便地遍历可迭代对象。掌握迭代器和可迭代对象的概念和使用方法,将有助于我们编写更加高效和简洁的代码。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~