在JavaScript中,我最近遇到了反向循环更快的方法。
我以这种形式看过它们:
var i = someArray.length;
while (i--) {
console.log(someArray[i]);
}
我测试了它,一旦它通过整个阵列就停止了。
一旦完成数组,它怎么知道什么时候停止?
答案 0 :(得分:12)
while循环每次循环时都会计算括号内的表达式。当该表达式变为falsey值时,循环将停止。
falsey值的示例是:
false
0
undefined
NaN
null
""
在这种情况下,i
的值将在每次循环时递减,当它达到0
的值时,循环将停止。因为它是一个后递减运算符,所以在递减之前检查表达式的值。这意味着内部循环将看到从i
到someArray.length - 1
(包括)的0
值,它们是该数组的所有索引。
您的代码示例:
var i = someArray.length;
while (i--) {
console.log(someArray[i]);
}
创建与此相同的输出:
for (var i = someArray.length - 1; i >= 0; i--) {
console.log(someArray[i]);
}
答案 1 :(得分:5)
当i--
达到0时,循环停止。
一旦while ( ... )
中的表达式求值为false,循环就会停止
由于i
是正数(长度),并且正在减少,因此在某个时刻它将达到零。
在布尔上下文中,零转换为false
,确保循环在某个点停止
由于i--
会返回先前递减的值,因此当循环停止时,i
实际上是-1
。
答案 2 :(得分:1)
每次循环运行时,都会检查i--
。 --
告诉Javascript将i
递减1.最终,i
将降为0,相当于false
。此时,循环停止。
答案 3 :(得分:0)
在暗处进行刺穿是因为0在布尔表达式中求值为false。 0 == true返回false 0 == false返回true
请注意,如果从-1开始,它将无休止地循环。
答案 4 :(得分:0)
while循环一旦达到伪造的值就停止评估。 0是一个伪造的值,它恰好是数组的第一个索引。 for循环在“ i”为0时仍然循环的原因是,当您执行减量表达式时,返回值实际上是操作之前变量的值。
let i = 10;
let j = i--
console.log(i) // 9
console.log(j) // 10
因此,当您的while循环变为1,然后for循环中的条件减小“-”时,i变量的返回值为1,这是正确的,但实际上,当您其余的循环访问i时,其值它是0。