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 - 1
到 0
(含)的 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 的计算结果为假。 严格来说,零在布尔上下文中不存在。发生的事情是abstractToBoolean
function 将0
转换为false
。
在 JS 布尔上下文(“世界”)中,我们只有两个值:true
和 false
(这是我对“上下文”一词的解释)。我错过了什么吗?
看起来我们在谈论不同的波长。如果在布尔上下文中只存在 true
和 false
而没有其他内容(如您所说),那么在该上下文中引入零是没有意义的,不是吗?
@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 循环如何知道何时停止?的主要内容,如果未能解决你的问题,请参考以下文章
While 循环和 innerHTML - 为啥它会反向显示数字?
JavaScript 中的 While 循环与 For 循环? [关闭]