反向while循环如何知道在JavaScript中何时停止
How does a reverse while loop know when to stop in JavaScript?
在JavaScript中,我最近发现了循环时反向是如何更快的。
我见过这种形式的
var i = someArray.length;
while (i--) {
console.log(someArray[i]);
}
我测试了一下,当它穿过整个阵列时,它就停止了。
它如何知道在完成阵列后何时停止?
while循环每次通过循环计算括号内的表达式。当该表达式的值为false时,循环将停止。
伪值的示例有:
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]);
}
当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。
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 在Javascript(jquery)中,有没有一种方法可以检测页面锚点何时更改
- 使用javascript停用/删除iframe
- 如何检查Javascript何时完成
- 何时使用Requirejs以及何时使用捆绑的javascript
- 一个html/javascript'小工具'知道用户何时单击了小部件外的任意位置
- 何时更喜欢javascript中的匿名函数
- 从 jquery.ready() 调用的 javascript 何时相对于 中的脚本运行
- 何时在 JavaScript 中使用导出默认值和导出常量
- Javascript 递归不知道何时退出
- HTML中的Javascript:何时使用分号,何时返回false
- GWT 生成的 JavaScript 何时出现
- 通过 Javascript 激活/停用点击事件
- 查找Javascript何时暂停(难以总结)
- JQuery Mobile-JavaScript何时加载到DOM中
- 检测外部JavaScript何时正在加载
- 检测Javascript何时完成执行
- 工厂函数与对象.create - JavaScript -何时使用哪个
- JavaScript 何时执行