JavaScript 可迭代对象
可迭代对象是可迭代的(像数组一样)。
可迭代对象可以通过简单而高效的代码访问。
可迭代对象可以使用 for..of
循环迭代。
For Of 循环
JavaScript for..of
语句循环遍历可迭代对象的元素。
语法
for (variable of iterable) {
// 要执行的代码块
}
迭代
迭代很容易理解。
它只是意味着遍历一系列元素。
这里有一些简单的例子
- 遍历字符串
- 遍历数组
遍历字符串
您可以使用 for..of
循环遍历字符串的元素
遍历数组
您可以使用 for..of
循环遍历数组的元素
遍历集合
您可以使用 for..of
循环遍历集合的元素
注意
集合和映射将在接下来的章节中介绍。
遍历映射
您可以使用 for..of
循环遍历映射的元素
例子
const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
for (const x of fruits) {
// 要执行的代码块
}
亲自尝试 »
JavaScript 迭代器
迭代器协议定义了如何从对象中生成值序列。
当对象实现一个next()
方法时,它就成为一个迭代器。
next()
方法必须返回一个具有两个属性的对象
- value(下一个值)
- done(true 或 false)
value | 迭代器返回的值 (如果 done 为 true,可以省略) |
---|---|
done |
true 如果迭代器已完成 false 如果迭代器已产生新值 |
注意
从技术上讲,可迭代对象必须实现Symbol.iterator
方法。
String、Array、TypedArray、Map 和 Set 都是可迭代的,因为它们的原型对象都有 Symbol.iterator 方法。
自制可迭代对象
此可迭代对象永远返回:10,20,30,40,..... 每次调用 next()
时。
例子
// 自制可迭代对象
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}
// 创建可迭代对象
const n = myNumbers();
n.next(); // 返回 10
n.next(); // 返回 20
n.next(); // 返回 30
亲自尝试 »
自制可迭代对象的问题
它不支持 JavaScript for..of
语句。
JavaScript 可迭代对象是一个具有Symbol.iterator的对象。
Symbol.iterator
是一个返回next()
函数的函数。
可迭代对象可以使用以下代码进行迭代:for (const x of iterable) { }
例子
// 创建一个对象
myNumbers = {};
// 使其可迭代
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}
现在你可以使用for..of
for (const num of myNumbers) {
// 这里可以写任何代码
}
亲自尝试 »
for..of
会自动调用 Symbol.iterator 方法。
但我们也可以“手动”执行此操作
例子
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// 这里可以写任何代码
}
亲自尝试 »