2012-02-24 51 views
2

在JavaScript中,我最近遇到了while循環更快的情況。反向while循環如何知道何時停止在JavaScript中?

我在這種形式看到他們:

var i = someArray.length; 

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

我測試了這一點,它停止一旦它通過全陣列去了。

它是如何知道什麼時候完成數組才停止的?

+0

一個[文章](http://www.sitepoint.com/javascript-truthy-falsy/),如果你想知道「真實性」是什麼。 – OnesimusUnbound 2012-02-24 22:30:45

+0

@OnesimusUnbound是的,該文章幫助ALOT,謝謝! – Jacob 2012-02-24 22:35:40

回答

11

while循環每次通過循環評估括號內的表達式。當該表達式得到錯誤值時,循環將停止。 falsey值

實例是:

false 
0 
undefined 
NaN 
null 
"" 

在這種情況下的i值將每一次循環時被遞減,並且當它碰到的0值時,循環停止。因爲它是一個後減量運算符,所以在減量之前檢查表達式的值。這意味着內部循環將會看到i的值從someArray.length - 10(含),它們都是該數組的所有索引。

你的代碼示例:

var i = someArray.length; 

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

產生相同的輸出,因爲這:

for (var i = someArray.length - 1; i >= 0; i--) { 
    console.log(someArray[i]); 
} 
+1

這些例子都是他們:) – pimvdb 2012-02-24 22:36:36

+1

很好的解釋,非常感謝 – Jacob 2012-02-24 22:39:09

5

i--達到0時,循環停止。

一旦while (...)中的表達式計算結果爲false,循環就會停止。
由於i是一個正數(長度),並且正在減少,所以在某個點上它將達到零。

在布爾上下文中,零轉換爲false,確保循環在某個點停止。
由於i--返回先前減少的值,因此當循環停止時,i實際上是-1

+2

說'零等於錯誤'並不完全正確,更好地說0評估爲錯誤。 – vascowhite 2012-02-24 22:25:54

+1

嚴格來說,零在布爾上下文中不存在。發生的事情是[抽象的'ToBoolean'函數](http://es5.github.com/#x9。2)將'0'轉換爲'false'。 – pimvdb 2012-02-24 22:34:42

+0

他說什麼:) – vascowhite 2012-02-24 22:36:43

1

循環運行時,都會i--檢查。 --告訴Javascript將i減1。最終,i將降爲0,這相當於false。此時,循環停止。

0

在黑暗中進行刺擊是因爲0在布爾表達式中計算爲false。 0 == true返回false 0 == false返回true

請注意,如果從-1開始,它將無限循環。