在JavaScript中,我最近遇到了while循環更快的情況。反向while循環如何知道何時停止在JavaScript中?
我在這種形式看到他們:
var i = someArray.length;
while (i--) {
console.log(someArray[i]);
}
我測試了這一點,它停止一旦它通過全陣列去了。
它是如何知道什麼時候完成數組才停止的?
在JavaScript中,我最近遇到了while循環更快的情況。反向while循環如何知道何時停止在JavaScript中?
我在這種形式看到他們:
var i = someArray.length;
while (i--) {
console.log(someArray[i]);
}
我測試了這一點,它停止一旦它通過全陣列去了。
它是如何知道什麼時候完成數組才停止的?
while循環每次通過循環評估括號內的表達式。當該表達式得到錯誤值時,循環將停止。 falsey值
實例是:
false
0
undefined
NaN
null
""
在這種情況下的i
值將每一次循環時被遞減,並且當它碰到的0
值時,循環停止。因爲它是一個後減量運算符,所以在減量之前檢查表達式的值。這意味着內部循環將會看到i
的值從someArray.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]);
}
當i--
達到0時,循環停止。
一旦while (...)
中的表達式計算結果爲false,循環就會停止。
由於i
是一個正數(長度),並且正在減少,所以在某個點上它將達到零。
在布爾上下文中,零轉換爲false
,確保循環在某個點停止。
由於i--
返回先前減少的值,因此當循環停止時,i
實際上是-1
。
說'零等於錯誤'並不完全正確,更好地說0評估爲錯誤。 – vascowhite 2012-02-24 22:25:54
嚴格來說,零在布爾上下文中不存在。發生的事情是[抽象的'ToBoolean'函數](http://es5.github.com/#x9。2)將'0'轉換爲'false'。 – pimvdb 2012-02-24 22:34:42
他說什麼:) – vascowhite 2012-02-24 22:36:43
循環運行時,都會i--
檢查。 --
告訴Javascript將i
減1。最終,i
將降爲0,這相當於false
。此時,循環停止。
在黑暗中進行刺擊是因爲0在布爾表達式中計算爲false。 0 == true返回false 0 == false返回true
請注意,如果從-1開始,它將無限循環。
一個[文章](http://www.sitepoint.com/javascript-truthy-falsy/),如果你想知道「真實性」是什麼。 – OnesimusUnbound 2012-02-24 22:30:45
@OnesimusUnbound是的,該文章幫助ALOT,謝謝! – Jacob 2012-02-24 22:35:40