手册
目录
for..of 语句用于遍历可迭代对象的元素。
for (variable of iterable) {
// 要执行的代码块
}
迭代很容易理解。
它只是意味着遍历一系列元素。
下面是一些简单的例子:
可以使用 for..of 循环遍历字符串的元素:
const name = "W3School";
for (const x of name) {
// 要执行的代码块
}
运行实例 »点击 "运行实例" 按钮查看在线实例
可以使用 for..of 循环遍历数组的元素:
const letters = ["a","b","c"];
for (const x of letters) {
// 要执行的代码块
}
运行实例 »点击 "运行实例" 按钮查看在线实例
const numbers = [2,4,6,8];
for (const x of numbers) {
// 要执行的代码块
}
运行实例 »点击 "运行实例" 按钮查看在线实例
可以使用 for..of 循环遍历 Set 的元素:
const letters = new Set(["a","b","c"]);
for (const x of letters) {
// 要执行的代码块
}
运行实例 »点击 "运行实例" 按钮查看在线实例
注释:我们将在后续章节中详细介绍 Set 和 Map。
可以使用 for..of 循环遍历 Map 的元素:
const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
for (const x of fruits) {
// 要执行的代码块
}
运行实例 »点击 "运行实例" 按钮查看在线实例
迭代器协议定义了如何从对象中生成一系列值。
当对象实现了 next() 方法时,它就成为迭代器。
next() 方法必须返回一包含两个属性的对象:
| value |
迭代器返回的值。 如果 done 为 true,则可以省略。 |
| done |
如果迭代器已完成,则为 true。 如果迭代器生成了新值,则为 false。 |
从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。
字符串、数组、TypedArray、Map 和 Set 都是可迭代对象,因为它们的原型对象具有 Symbol.iterator 方法。
下例展示了一个自定义的可迭代对象,它永远不会结束,每次调用 next() 都会返回 10, 20, 30, 40, ...:
// 自定义可迭代对象
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) {
// 任意代码
}
运行实例 »点击 "运行实例" 按钮查看在线实例
Symbol.iterator 方法会被 for..of 自动调用。
但我们也可以手动调用它:
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// 任意代码
}
运行实例 »点击 "运行实例" 按钮查看在线实例
相关
视频
RELATED VIDEOS
科技资讯
1
2
3
4
5
6
7
8
精选课程
共5课时
17.2万人学习
共49课时
77万人学习
共29课时
61.7万人学习
共25课时
39.3万人学习
共43课时
70.9万人学习
共25课时
61.6万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125万人学习