在 JavaScript 中,我们经常使用循环来迭代数组、对象或其他集合。两种常见的迭代循环是 for...in
和 for...of
。尽管它们看起来相似,但它们在使用和功能上有着显著的区别。
for...in
for...in
语句用于迭代对象的可枚举属性。
for (variable in object) {
// code to be executed
}
variable
:每次迭代时将要赋给一个可枚举属性的变量名。object
:要遍历的对象,可以是数组、函数、字符串、数字和其他对象。
注意:for...in
循环不适用于迭代数组和字符串。
迭代对象
我们可以使用 for...in
循环枚举对象的属性,例如:
const person = {
name: "John",
age: 30,
city: "New York"
};
for (let prop in person) {
console.log(prop + ": " + person[prop]);
}
输出:
name: John
age: 30
city: New York
在这个例子中,prop
是每个属性的变量名,person[prop]
是对应属性的值。
迭代数组和字符串
虽然不推荐使用 for...in
循环来迭代数组和字符串,但是在某些情况下,我们可以使用对象的内置方法来实现迭代。例如,如果我们想迭代数组的索引:
const fruits = ["apple", "banana", "orange"];
for (let index in fruits) {
console.log(index);
}
输出:
0
1
2
但是需要注意,for...in
循环迭代的是数组的索引,而不是数组的元素。
for...of
for...of
语句用于迭代可迭代对象的内容。
for (variable of iterable) {
// code to be executed
}
variable
:在每次循环中将要赋给不同属性值的变量名。iterable
:一个实现了迭代器接口的对象,包括数组、字符串、Set、Map 等。variable
使用的是of
,而不是in
。
迭代数组
使用 for...of
循环迭代数组更加直观和简洁:
const fruits = ["apple", "banana", "orange"];
for (let fruit of fruits) {
console.log(fruit);
}
输出:
apple
banana
orange
在这里,fruit
变量逐个获取数组的元素。
迭代字符串
for...of
循环也适用于迭代字符串的每个字符:
const message = "Hello, World!";
for (let char of message) {
console.log(char);
}
输出:
H
e
l
l
o
,
W
o
r
l
d
!
char
变量逐个获取字符串中的字符。
区别总结
for...in
是用于迭代对象的可枚举属性,而for...of
是用于迭代可迭代对象的内容。for...in
适用于对象,而for...of
适用于数组、字符串、Set、Map 等可迭代对象。for...in
循环迭代对象时,返回的是属性名;for...of
循环迭代可迭代对象时,返回的是属性值。for...in
循环适用于手动索引数组,而for...of
循环更直观和简洁。
希望通过本博客,你可以清楚地了解 for...in
和 for...of
之间的区别并正确选择适用于不同场景的循环方式。
本文来自极简博客,作者:蓝色海洋,转载请注明原文链接:JS 中 for...in 和 for...of 的区别