关键词:for...in遍历、for...of遍历
以下是 for...of
、for...in
和 for
循环的区别对比表格:
特性 | for...of 循环 | for...in 循环 | for 循环 |
---|---|---|---|
遍历对象类型 | 可以遍历可迭代对象(如数组、字符串、Set、Map、Generator 等) | 可以遍历对象的可枚举属性 | 不适用于直接遍历对象,适用于遍历数组或固定个数的循环 |
遍历数组 | 遍历数组的元素 | 遍历数组的索引 | 遍历数组的索引或值 |
遍历字符串 | 遍历字符串的字符 | 遍历字符串的索引 | 遍历字符串的索引或字符 |
遍历 Set | 遍历 Set 的值 | 不适用 | 不适用 |
遍历 Map | 遍历 Map 的键值对 | 不适用 | 不适用 |
遍历对象 | 不适用 | 遍历对象的可枚举属性及其对应的值 | 不适用 |
遍历 Generator | 遍历 Generator 生成的值 | 不适用 | 不适用 |
遍历可迭代对象 | 遍历可迭代对象的元素 | 不适用 | 不适用 |
适用范围 | 适用于需要遍历可迭代对象的场景 | 适用于需要遍历对象的可枚举属性的场景 | 适用于需要手动控制循环次数的场景 |
遍历顺序 | 按照可迭代对象的顺序进行遍历 | 不保证顺序 | 按照循环次数进行遍历 |
需要注意的是,for...of
循环只能用于可迭代对象,并且会遍历对象的迭代器方法(即 Symbol.iterator
),而 for...in
循环会遍历对象的所有可枚举属性,包括原型链上的属性。
对于遍历数组的场景,可以使用 for...of
循环遍历数组的元素,也可以使用 for
循环遍历数组的索引或值。具体选择哪种方式取决于遍历的目的和需求。
以下是一个使用不同循环方式遍历数组的示例:
var arr = [1, 2, 3];
console.log("for...of 循环:");
for (var element of arr) {
console.log(element);
}
console.log("for...in 循环:");
for (var index in arr) {
console.log(arr[index]);
}
console.log("for 循环:");
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
输出结果为:
for...of 循环:
1
2
3
for...in 循环:
1
2
3
for 循环:
1
2
3