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

Jac*_*cob 3 javascript arrays loops while-loop

在JavaScript中,我最近遇到了反向循环更快的问题.

我以这种形式看过它们:

var i = someArray.length;

while (i--) {
  console.log(someArray[i]);
}
Run Code Online (Sandbox Code Playgroud)

我测试了它,一旦它通过整个阵列就停止了.

一旦完成阵列,它如何知道何时停止?

jfr*_*d00 12

while循环每次循环时都会计算括号内的表达式.当该表达式变为falsey值时,循环将停止.

假名值的示例是:

false 
0  
undefined  
NaN
null
""
Run Code Online (Sandbox Code Playgroud)

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

你的代码示例:

var i = someArray.length;

while (i--) {
    console.log(someArray[i]);
}
Run Code Online (Sandbox Code Playgroud)

创建相同的输出:

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


Rob*_*b W 5

当i--达到0时,循环停止.

一旦表达式while ( ... )计算为false ,循环就会停止.
由于i是正数(长度),并且减少,因此在某个时刻它将达到零.

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

  • 说'零等于假'是不正确的,更好地说0评估为假. (2认同)