For...in 循环
在为...在循环,消除计数逻辑和退出条件在for循环的弱点得到改善。
例子:
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (const index in digits) {
console.log(digits[index]);
}
但是,您仍然必须处理使用索引访问数组值的问题,这很糟糕;它几乎使它比以前更加混乱。
此外,当您需要向数组(或其他对象)添加额外方法时,for...in 循环可能会给您带来大麻烦。因为 for...in 循环遍历所有可枚举的属性,这意味着如果您向数组的原型添加任何其他属性,那么这些属性也将出现在循环中。
Array.prototype.decimalfy = function() {
for (let i = 0; i < this.length; i++) {
this[i] = this[i].toFixed(2);
}
};
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (const index in digits) {
console.log(digits[index]);
}
印刷:
0
1
2
3
4
5
6
7
8
9
function() { for (let i = 0; i < this.length; i++) { this[i] = this[i].toFixed(2); } }
这就是为什么在遍历数组时不鼓励使用 for...in 循环。
注意:forEach 循环是 JavaScript 中另一种类型的 for 循环。但是,forEach()
实际上是一种数组方法,因此只能与数组一起使用。也没有办法停止或中断 forEach 循环。如果您在循环中需要这种类型的行为,则必须使用基本的 for 循环。
For...of 循环
在对...的循环用于遍历任何类型的数据是可迭代。
例子:
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (const digit of digits) {
console.log(digit);
}
印刷:
0
1
2
3
4
5
6
7
8
9
这使得 for...of 循环成为所有 for 循环中最简洁的版本。
但是等等,还有更多!for...of 循环还有一些额外的好处,可以修复 for 和 for...in 循环的弱点。
您可以随时停止或中断 for...of 循环。
const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (const digit of digits) {
if (digit % 2 === 0) {
continue;
}
console.log(digit);
}
印刷:
1
3
5
7
9
而且您不必担心向对象添加新属性。for...of 循环只会遍历对象中的值。