在JavaScript中,for...of
循环(有时被误称为 c
标签迭代,可能是指 for...of
中的 of
关键字)是一种用于遍历可迭代对象(如数组、字符串、Map、Set等)的简洁语法。它允许你轻松地访问集合中的每个元素,而无需关心集合的底层结构。
for...of
循环的基本语法如下:
for (const element of iterable) {
// 执行的代码块
}
其中 iterable
是一个可迭代对象,element
是在每次迭代中从 iterable
中取出的当前元素。
for...of
提供了一种比传统 for
循环更简洁的方式来遍历集合。for...of
循环可以用于遍历以下类型的对象:
for await...of
)const arr = [1, 2, 3, 4, 5];
for (const num of arr) {
console.log(num);
}
const str = "hello";
for (const char of str) {
console.log(char);
}
const map = new Map([["a", 1], ["b", 2], ["c", 3]]);
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
for...of
循环不能直接用于普通对象普通对象不是可迭代对象,因此不能直接使用 for...of
循环遍历。如果需要遍历对象的属性,可以使用 for...in
循环或 Object.keys()
、Object.entries()
等方法。
const obj = { a: 1, b: 2, c: 3 };
// 使用 for...in 遍历属性名
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(`${key}: ${obj[key]}`);
}
}
// 使用 Object.entries() 遍历键值对
for (const [key, value] of Object.entries(obj)) {
console.log(`${key}: ${value}`);
}
for...of
循环中的变量作用域在 for...of
循环中使用 let
声明的变量具有块级作用域,这意味着每次迭代都会创建一个新的变量实例。
const arr = [1, 2, 3];
for (let num of arr) {
setTimeout(() => console.log(num), 1000);
}
// 输出将是 1, 2, 3 而不是 3, 3, 3
如果你使用 var
声明变量,将会出现不同的行为,因为 var
具有函数级作用域。
for...of
循环是JavaScript中遍历可迭代对象的强大工具,它提供了简洁、可读性强的语法。然而,需要注意的是,它不适用于普通对象,需要使用其他方法来遍历对象的属性。
领取专属 10元无门槛券
手把手带您无忧上云