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)
当i--达到0时,循环停止.
一旦表达式while ( ... )计算为false ,循环就会停止.
由于i是正数(长度),并且减少,因此在某个时刻它将达到零.
在布尔上下文中,零转换为false,确保循环在某个点停止.
因为i--返回值先递减,i实际上-1是循环停止时.