ZetCode

JavaScript 的 of 关键字

最后修改于 2025 年 4 月 16 日

在本文中,我们将展示如何在 JavaScript 的 for...of 循环中使用 of 关键字来迭代可迭代对象。

of 关键字

of 关键字用于 for...of 循环中,以迭代可迭代对象。与传统的 for 循环相比,它在处理集合时提供了更简洁的语法。

for...of 语句创建一个循环,迭代可迭代对象,包括数组、字符串、Map、Set 和其他类似数组的对象。它是在 ES6 (ECMAScript 2015) 中引入的。

与迭代属性名称的 for...in 不同,for...of 迭代属性值。这使其非常适合直接处理集合的值。

使用数组的基本 for...of 循环

以下示例演示了 for...of 在数组中的基本用法。

main.js
const fruits = ['apple', 'banana', 'cherry'];

for (const fruit of fruits) {
    console.log(fruit);
}

此循环迭代 fruits 数组中的每个元素。fruit 变量依次获取每个数组元素的值。这比使用索引变量的传统 for 循环更简单。

$ node main.js
apple
banana
cherry

迭代字符串

for...of 循环也可以逐个字符地迭代字符串。

main.js
const message = 'Hello';

for (const char of message) {
    console.log(char);
}

此示例展示了如何单独处理字符串中的每个字符。char 变量依次保存每个字符。与使用传统 for 循环的字符串索引相比,这更具可读性。

$ node main.js
H
e
l
l
o

处理 Map 对象

for...of 适用于 Map 对象,允许迭代键值对。

main.js
const colors = new Map();
colors.set('red', '#FF0000');
colors.set('green', '#00FF00');
colors.set('blue', '#0000FF');

for (const [name, hex] of colors) {
    console.log(`${name}: ${hex}`);
}

在这里,我们在循环中使用数组解构来从每个 Map 条目中解包键和值。for...of 循环提供了一种简洁的方式来迭代 Map 集合。

$ node main.js
red: #FF0000
green: #00FF00
blue: #0000FF

迭代 Set 对象

也可以使用 for...of 迭代 Set 对象,因为它们是可迭代对象。

main.js
const uniqueNumbers = new Set([1, 2, 3, 2, 1]);

for (const num of uniqueNumbers) {
    console.log(num);
}

此示例演示了如何迭代 Set 的唯一值。该循环会自动处理 Set 的唯一性属性。仅处理唯一值,即使原始数组中存在重复项也是如此。

$ node main.js
1
2
3

与 arguments 对象一起使用

for...of 循环可以迭代函数中的 arguments 对象。

main.js
function sumAll() {
    let total = 0;
    for (const num of arguments) {
        total += num;
    }
    return total;
}

console.log(sumAll(1, 2, 3, 4));

在这里,我们使用 for...of 来处理传递给函数的所有参数。arguments 对象是类似数组且可迭代的。这提供了一种简洁的方式来处理可变数量的参数。

$ node main.js
10

使用 for...of 循环中断迭代

可以使用 breakcontinue 语句来控制 for...of 循环。

main.js
const numbers = [1, 2, 3, 4, 5, 6];

for (const num of numbers) {
    if (num > 4) {
        break;
    }
    console.log(num);
}

此示例展示了如何使用 break 提前退出 for...of 循环。当遇到大于 4 的数字时,循环停止。这表明 for...of 循环支持正常的循环控制语句。

$ node main.js
1
2
3
4

迭代 NodeList 对象

for...of 适用于处理由 querySelectorAll 等方法返回的 DOM NodeList 对象。

main.js
// Assuming HTML with <div class="box">Box 1</div><div class="box">Box 2</div>
const boxes = document.querySelectorAll('.box');

for (const box of boxes) {
    console.log(box.textContent);
}

此示例展示了如何迭代在 NodeList 中收集的 DOM 元素。对于 DOM 操作,与传统的 forEach 或索引循环等方法相比,for...of 循环提供了一种更简洁的替代方案。

$ node main.js
Box 1
Box 2

来源

for...of - 语言参考

在本文中,我们已经演示了如何在 for...of 循环中使用 of 关键字来迭代 JavaScript 中的各种可迭代对象。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

查看 所有 JavaScript 教程。