返回
ES6 赋能 JavaScript,for…of 循环全解
前端
2023-12-08 04:40:49
深入理解 JavaScript 中的 for…of 循环
1. for…of 循环的简介
for…of 循环是 ES6 中引入的一种新型迭代循环,旨在提供更简洁、高效的迭代方式,主要用于遍历可迭代对象(如数组、对象、字符串)。for…of 循环采用 let/const 来定义循环变量,并在循环体内使用该变量访问每个迭代元素的值。
const numbers = [1, 2, 3, 4, 5];
for (const number of numbers) {
console.log(number); // 输出:1 2 3 4 5
}
2. for…of 循环的应用场景
for…of 循环主要用于遍历可迭代对象。它提供了比传统 for 循环和 forEach() 方法更简洁、高效的语法,尤其适用于需要按顺序迭代对象元素的场景。
1. 遍历数组:
const numbers = [1, 2, 3, 4, 5];
for (const number of numbers) {
console.log(number); // 输出:1 2 3 4 5
}
2. 遍历对象:
const person = {
name: 'John Doe',
age: 30,
city: 'New York'
};
for (const key of Object.keys(person)) {
console.log(key); // 输出:name, age, city
}
for (const value of Object.values(person)) {
console.log(value); // 输出:John Doe, 30, New York
}
3. 遍历字符串:
const str = 'Hello World';
for (const char of str) {
console.log(char); // 输出:H e l l o W o r l d
}
3. for…of 循环的优势
1. 简洁性:
for…of 循环的语法简洁明了,不需要显式声明循环变量的类型和初始值,循环变量直接使用 const/let 关键字声明即可,代码更加精简。
// 传统 for 循环
for (let i = 0; i < numbers.length; i++) {
const number = numbers[i];
console.log(number);
}
// for...of 循环
for (const number of numbers) {
console.log(number);
}
2. 性能提升:
for…of 循环在迭代数组时,能够直接访问数组元素的值,避免了对数组索引的额外计算,因此性能优于传统的 for 循环。
// 传统 for 循环
const numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
console.log(sum); // 输出:15
// for...of 循环
const numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (const number of numbers) {
sum += number;
}
console.log(sum); // 输出:15
3. 可迭代对象的支持:
for…of 循环可以迭代任何可迭代对象,包括数组、对象、字符串、Map、Set 等,使用起来更加灵活。
// 迭代数组
const numbers = [1, 2, 3, 4, 5];
for (const number of numbers) {
console.log(number);
}
// 迭代对象
const person = {
name: 'John Doe',
age: 30,
city: 'New York'
};
for (const key of Object.keys(person)) {
console.log(key);
}
// 迭代字符串
const str = 'Hello World';
for (const char of str) {
console.log(char);
}
4. for…of 循环的限制
1. 不可修改迭代元素:
for…of 循环在迭代过程中无法修改迭代元素的值,如果需要修改元素值,可以使用传统的 for 循环或forEach() 方法。
const numbers = [1, 2, 3, 4, 5];
for (const number of numbers) {
number += 1; // 报错:TypeError: Assignment to constant variable.
}
2. 无法使用 break 和 continue 语句:
在 for…of 循环中不能使用 break 和 continue 语句,如果需要提前终止循环或跳过某个迭代元素,可以使用传统的 for 循环或forEach() 方法。
const numbers = [1, 2, 3, 4, 5];
for (const number of numbers) {
if (number === 3) {
break; // 报错:SyntaxError: Unexpected token 'break'
}
}