hand
_1_11_202
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:46:15
在 JavaScript 的世界里,生成器、迭代器以及可迭代对象是非常重要的概念,它们为处理数据集合提供了强大而灵活的方式。本文将深入探讨迭代器协议以及可迭代对象的特点,让你对这些概念有更清晰的认识。
迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值。一个对象如果要成为迭代器,它必须实现一个 next()
方法,这个方法返回一个包含两个属性的对象:value
和 done
。
value
:表示当前迭代步骤的值。done
:是一个布尔值,true
表示迭代结束,false
表示还有更多的值可以迭代。
// 创建一个简单的迭代器
const myIterator = {
index: 0,
data: [1, 2, 3],
next() {
if (this.index < this.data.length) {
return { value: this.data[this.index++], done: false };
} else {
return { value: undefined, done: true };
}
}
};
console.log(myIterator.next()); // { value: 1, done: false }
console.log(myIterator.next()); // { value: 2, done: false }
console.log(myIterator.next()); // { value: 3, done: false }
console.log(myIterator.next()); // { value: undefined, done: true }
可迭代对象是实现了可迭代协议的对象。可迭代协议要求对象必须实现一个 Symbol.iterator
方法,该方法返回一个迭代器对象。
在 JavaScript 中,有许多内置的可迭代对象,如数组、字符串、Set、Map 等。
const arr = [1, 2, 3];
const arrIterator = arr[Symbol.iterator]();
console.log(arrIterator.next()); // { value: 1, done: false }
console.log(arrIterator.next()); // { value: 2, done: false }
console.log(arrIterator.next()); // { value: 3, done: false }
console.log(arrIterator.next()); // { value: undefined, done: true }
const str = 'abc';
const strIterator = str[Symbol.iterator]();
console.log(strIterator.next()); // { value: 'a', done: false }
console.log(strIterator.next()); // { value: 'b', done: false }
console.log(strIterator.next()); // { value: 'c', done: false }
console.log(strIterator.next()); // { value: undefined, done: true }
for...of
循环:可迭代对象可以直接使用 for...of
循环进行遍历,代码更加简洁。
const arr = [1, 2, 3];
for (const item of arr) {
console.log(item);
}
const arr = [1, 2, 3];
const [a, b, c] = arr;
console.log(a, b, c); // 1 2 3
const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = [...arr1,...arr2];
console.log(combined); // [1, 2, 3, 4]
概念 | 定义 | 特点 |
---|---|---|
迭代器协议 | 对象实现 next() 方法,返回 { value, done } 对象 |
用于产生有限或无限序列的值 |
可迭代协议 | 对象实现 Symbol.iterator 方法,返回迭代器对象 |
支持 for...of 循环、解构赋值、扩展运算符等操作 |
可迭代对象 | 实现了可迭代协议的对象,如数组、字符串、Set、Map 等 | 提供了统一的遍历方式,代码更简洁灵活 |
通过理解迭代器协议和可迭代对象的特点,你可以更加高效地处理数据集合,编写出更加优雅和健壮的 JavaScript 代码。希望本文能帮助你更好地掌握这些重要的概念。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~