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

时间:2012-02-24 22:21:24

标签: javascript arrays loops while-loop

在JavaScript中,我最近遇到了反向循环更快的方法。

我以这种形式看过它们:

var i = someArray.length;

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

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

一旦完成数组,它怎么知道什么时候停止?

5 个答案:

答案 0 :(得分:12)

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

falsey值的示例是:

false 
0  
undefined  
NaN
null
""

在这种情况下,i的值将在每次循环时递减,当它达到0的值时,循环将停止。因为它是一个后递减运算符,所以在递减之前检查表达式的值。这意味着内部循环将看到从isomeArray.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。