JavaScript 中 for、forEach、for...in、for...of 循環(huán)的區(qū)別和使用
JavaScript 中有多種循環(huán)語句,包括傳統(tǒng)的 for 循環(huán)、forEach 方法、for...in 循環(huán)和 for...of 循環(huán)。這些循環(huán)語句各有特點(diǎn),適用于不同的場(chǎng)景。下面將分別介紹它們的區(qū)別和使用,并給出相應(yīng)的例子。
1. for 循環(huán)
for 循環(huán)是 JavaScript 中最常用的循環(huán)語句之一,它的基本語法為:
for (初始化; 條件; 遞增或遞減) {
// 循環(huán)體
}
- 初始化:在循環(huán)開始之前執(zhí)行的代碼,用于初始化循環(huán)控制變量。
- 條件:在每次迭代之前進(jìn)行條件檢查,如果條件為真,則執(zhí)行循環(huán)體;否則循環(huán)終止。
- 遞增或遞減:在每次迭代之后執(zhí)行的代碼,用于更新循環(huán)控制變量。
示例:
// 使用 for 循環(huán)計(jì)算數(shù)組中所有元素的總和
let numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
console.log(sum); // 輸出:15
2. forEach 方法
forEach 是 JavaScript 數(shù)組對(duì)象的一個(gè)方法,用于遍歷數(shù)組的每個(gè)元素,并對(duì)每個(gè)元素執(zhí)行指定的回調(diào)函數(shù)。其基本語法為:
array.forEach(function(currentValue, index, array) {
// 回調(diào)函數(shù)
});
- currentValue:當(dāng)前迭代的元素值。
- index:當(dāng)前迭代的索引。
- array:原始數(shù)組對(duì)象。
示例:
// 使用 forEach 方法計(jì)算數(shù)組中所有元素的總和
let numbers = [1, 2, 3, 4, 5];
let sum = 0;
numbers.forEach(function(number) {
sum += number;
});
console.log(sum); // 輸出:15
3. for...in 循環(huán)
for...in 循環(huán)用于遍歷對(duì)象的可枚舉屬性,并執(zhí)行指定的代碼塊。其基本語法為:
for (let key in object) {
// 執(zhí)行代碼
}
- key:對(duì)象的屬性名。
- object:被遍歷的對(duì)象。
需要注意的是,for...in 循環(huán)不僅遍歷對(duì)象自身的屬性,還會(huì)遍歷繼承的屬性,因此在遍歷對(duì)象時(shí),通常需要使用 hasOwnProperty 方法來過濾掉繼承的屬性。
示例:
// 使用 for...in 循環(huán)遍歷對(duì)象的屬性
let person = {
name: 'John',
age: 30,
gender: 'male'
};
for (let key in person) {
if (person.hasOwnProperty(key)) {
console.log(key + ': ' + person[key]);
}
}
// 輸出:
// name: John
// age: 30
// gender: male
4. for...of 循環(huán)
for...of 循環(huán)是 ES6 引入的一種遍歷可迭代對(duì)象的語法,包括數(shù)組、字符串、Set、Map、Generator 對(duì)象等。其基本語法為:
for (let element of iterable) {
// 執(zhí)行代碼
}
- element:當(dāng)前迭代的元素值。
- iterable:可迭代對(duì)象,例如數(shù)組、字符串等。
與 for...in 循環(huán)不同,for...of 循環(huán)只遍歷可迭代對(duì)象自身的元素,不會(huì)遍歷對(duì)象的屬性。
示例:
// 使用 for...of 循環(huán)遍歷數(shù)組
let numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let number of numbers) {
sum += number;
}
console.log(sum); // 輸出:15
區(qū)別和使用場(chǎng)景
- for 循環(huán):
- 適用于需要對(duì)數(shù)組或類數(shù)組對(duì)象進(jìn)行精確控制的情況,例如根據(jù)索引訪問數(shù)組元素、逐個(gè)修改數(shù)組元素等。
- 可以使用 break 和 continue 控制循環(huán)的流程。
- forEach 方法:
- 簡(jiǎn)化了對(duì)數(shù)組的遍歷,代碼更加簡(jiǎn)潔易讀。
- 不能使用 break 和 continue 控制循環(huán)的流程。
- for...in 循環(huán):
- 適用于遍歷對(duì)象的屬性,特別是需要遍歷對(duì)象的所有可枚舉屬性的情況。
- 需要注意過濾掉繼承的屬性。
- for...of 循環(huán):
- 適用于遍歷可迭代對(duì)象的情況,包括數(shù)組、字符串等。
- 不適用于遍歷對(duì)象的屬性,只能遍歷對(duì)象的值。
不同的循環(huán)語句各有特點(diǎn),應(yīng)根據(jù)具體的需求和場(chǎng)景選擇合適的循環(huán)方式。