2013-12-24 169 views
4

我很抱歉如果這是一個愚蠢的問題,但我無法在任何地方找到答案。while(i - > 0)是什麼意思?

以下代碼是如何工作的? (我知道這遍歷的els元素)

var i = els.length; 
while (i --> 0) { 
    var el = els[i]; 
    // ...do stuff... 
} 

我不知道-->手段。沒有它的文檔。有人能夠啓發我嗎?

+2

這是我 - 大於0 – tewathia

+2

A間距錯字確實得到4 upvotes? –

+2

@RJJordan - 這不是間距錯字。它可能(可能)是用' - >'作爲一種僞「倒數」運算符形成箭頭的故意嘗試。整個陳述被解讀爲「我去零」... – nnnnnn

回答

5

應讀作

i-- > 0 

那麼,到底發生了什麼就是,i

  1. 值將被檢查是否大於0,如果是真的,那麼控制進入while塊,如果它是假while塊將被跳過。

  2. 無論哪種方式,的i值將遞減,立即條件檢查後。

它總是更好地使用for循環,當我們運行一個循環有一個計數器,這樣

for (var i = els.length - 1; i >= 0; i -= 1) { 
    ... 
} 

Please read more about whether ++, -- is okay or not.

+0

值在減量之前檢查值。如果它被寫爲'--i> 0',那麼在遞減之後將檢查該值。 – sbking

+0

@Cuberto這就是爲什麼我提到減少後。 :) – thefourtheye

+0

你確實提到了「post decremented」,但是你通過說「然後會檢查該值」來混淆它,這會使得它聽起來像在遞減之後發生的那樣... – nnnnnn

0

這只是奇怪的間距。這是一樣的

while (i-- > 0) { 
0

的代碼實際上應該是:

while (i-- > 0) { 

其中,如果變量i已遞減後的值大於零,則循環運行。

+0

比較後發生遞減,' - i'爲預遞減。 – RobG

4

這只是奇怪的間距,應

while((i--) > 0) 

它只是遞減後和檢查的條件。 有在C++問題,這個幽默的回答,但我認爲它刪除了

while (x --\ 
      \ 
      \ 
       \ 
       > 0) //i goes down to zero! 

或者類似的東西,反正

所以,如果你有這樣的事情

var i=3; 
while(i-->0){ 
    console.log(i); 
} 

它會返回

2 
1 
0 
+0

它是如此;-)但無論如何,你的答案共享這樣一個有趣的C++代碼值得upvoting) – zerkms

+0

大聲笑...我剛剛讀了原來的答案和評論跟着它。 – thefourtheye

+0

是的,我認爲我至少讀了一次所有的答案和評論 – scrblnrd3