为…在循环
为…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循环可能会给您带来大麻烦。因为……在循环中,循环遍历所有可枚举的属性,这意味着如果您向数组的原型添加任何额外的属性,那么这些属性也将出现在循环中。
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
函数(){
for(设I = 0;I < this.length;我+ +){
this[i] = this[i].toFixed(2);
}
}
这就是为什么……当循环遍历数组时,不鼓励使用In循环。
注意:forEach循环是JavaScript中的另一种for循环。
然而,forEach()实际上是一个数组方法,因此只能使用它
仅用于数组。也没有办法停止或打破一个
forEach循环。如果你的循环中需要这种类型的行为,你会
必须使用一个基本的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
这使得……Of loop是所有for循环中最简洁的版本。
但是等等,还有更多!为…Of循环还有一些额外的优点,可以修复for和for…在循环。
你可以stop或break for…的循环。
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
您不必担心向对象添加新属性。为…Of循环将只循环遍历对象中的值。