反向while循环如何知道在JavaScript中何时停止

How does a reverse while loop know when to stop in JavaScript?

本文关键字:JavaScript 何时停 何知道 while 循环 反向      更新时间:2023-09-26

在JavaScript中,我最近发现了循环时反向是如何更快的。

我见过这种形式的

var i = someArray.length;
while (i--) {
  console.log(someArray[i]);
}

我测试了一下,当它穿过整个阵列时,它就停止了。

它如何知道在完成阵列后何时停止?

while循环每次通过循环计算括号内的表达式。当该表达式的值为false时,循环将停止。

伪值的示例有:

false 
0  
undefined  
NaN
null
""

在这种情况下,i的值将在循环中每次递减,当它达到0的值时,循环将停止。因为它是一个递减后运算符,所以在递减之前会检查表达式的值。这意味着内部循环将看到从someArray.length - 10(包括i)的值,这些值是该数组的所有索引。

您的代码示例:

var i = someArray.length;
while (i--) {
    console.log(someArray[i]);
}

创建与以下相同的输出:

for (var i = someArray.length - 1; i >= 0; i--) {
    console.log(someArray[i]);
}

i--达到0时,循环停止。

一旦while ( ... )中的表达式计算为false,循环就会停止
由于i是一个正数(长度),并且不断减少,它将在某个点达到零。

在布尔上下文中,零转换为false,确保循环在某个点停止
因为i--返回递减之前的值,所以当循环停止时,i实际上是-1

每次运行循环时,都会检查i----告诉Javascript将i递减1。最终,i将降到0,这相当于false。此时,循环停止。

在黑暗中冒险是因为0在布尔表达式中的计算结果为false。0==true返回false0==false返回true

请注意,如果从-1开始,它将无休止地循环。

while循环一旦达到错误值就停止求值。0是一个错误的值,它恰好是数组的第一个索引。当"i"为0时,for循环仍然循环的原因是,当执行递减表达式时,返回值实际上是运算前变量的值。

let i = 10;
let j = i--
console.log(i) // 9
console.log(j) // 10

因此,当while循环达到1,然后for循环中的条件递减"--"i变量时,返回值为1,这是事实,但事实上,当循环的其余部分访问i时,它的值为0。