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

Posted

技术标签:

【中文标题】JavaScript 中的反向 while 循环如何知道何时停止?【英文标题】:How does a reverse while loop know when to stop in JavaScript? 【发布时间】:2012-03-15 09:13:28 【问题描述】:

javascript 中,我最近发现了如何反向 while 循环更快。

我见过他们这样的形式:

var i = someArray.length;

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

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

一旦完成数组,它如何知道何时停止?

【问题讨论】:

一个article,以防你想知道什么是“真实性”。 @OnesimusUnbound 是的,这篇文章很有帮助,谢谢! 【参考方案1】:

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

错误值的示例是:

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]);

【讨论】:

这些例子都是:)【参考方案2】:

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

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

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

【讨论】:

说“0 等于假”不太正确,最好说 0 的计算结果为假。 严格来说,零在布尔上下文中不存在。发生的事情是abstract ToBoolean function 将0 转换为false 在 JS 布尔上下文(“世界”)中,我们只有两个值:truefalse(这是我对“上下文”一词的解释)。我错过了什么吗? 看起来我们在谈论不同的波长。如果在布尔上下文中只存在 truefalse 而没有其他内容(如您所说),那么在该上下文中引入零是没有意义的,不是吗? @pimvdb 现在,我看到了您的问题。我的意思是:“零,在布尔上下文中使用,转换为假。” (方法(“零”)=false,因此我的“零等于布尔上下文中的假”语句)。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

请注意,如果您从 -1 开始,它将无限循环。

【讨论】:

【参考方案5】:

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。

【讨论】:

以上是关于JavaScript 中的反向 while 循环如何知道何时停止?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript while循环返回值

While 循环和 innerHTML - 为啥它会反向显示数字?

JavaScript:while循环中的异步方法

JavaScript 中的 While 循环与 For 循环? [关闭]

while循环中的Javascript continue语句导致无限循环

while 循环中的赋值 - Javascript