2010-01-09 45 views
2

所以我看了一下控制SO廣告頁面上的計數器的代碼。然後我看到了這一行發生在i-->。這是做什麼的?i - > opeator在JavaScript中做了什麼?

這裏是全碼:

$(function(){ 

    var visitors = 5373891; 
    var updateVisitors = function() 
    { 
      visitors++; 

      var vs = visitors.toString(), 
       i = Math.floor(vs.length/3), 
       l = vs.length % 3; 
      while (i-->0) if (!(l==0&&i==0))   // <-------- Here it is!!! 
       vs = vs.slice(0,i*3+l) 
        + ',' 
        + vs.slice(i*3+l); 
      $('#devCount').text(vs); 
      setTimeout(updateVisitors, Math.random()*2000); 
    }; 

    setTimeout(updateVisitors, Math.random()*2000); 

}); 
+2

這顯然是從http: //stackoverflow.com/questions/1642028/what-is-the-name-of-this-operator – 2010-01-09 21:05:51

+0

這個問題是關於Javascript。你參考的是關於C/C++。這是真的,他們是相似的,甚至可能複製,但我認爲這是一個足夠公平的變體,因爲它要求一種不同的語言。 – 2010-01-09 23:07:23

+0

@Rob Levine:太棒了!我會針對支持後減量運算符和大於運算符的每種編程語言發佈類似的問題:-P(以及支持前減量和小於運算符xD的每種語言) – 2010-01-10 23:08:01

回答

13

i-->0相同i-- > 0,所以比較表達式如果i--評價值大於0更大。

+2

哇,這樣一起運行它,甚至讓我困惑了一會兒。好眼睛,Gumbo。 – Sampson 2010-01-09 20:37:06

+0

這似乎很混亂!感謝您解釋它。 – 2010-01-09 20:38:06

+2

爲了澄清,意味着比較「i> 0」在* i遞減之前發生*。 – 2010-01-09 20:43:48

6

它不是運營商。請參閱此鏈接:

What is the "-->" operator in C++?

var i = 10; 

while (i-- > 0) 
{ 
    alert('i = ' + i); 
} 

輸出:

完全相同的線程JCasso想到的
i = 9 
i = 8 
i = 7 
i = 6 
i = 5 
i = 4 
i = 3 
i = 2 
i = 1 
i = 0 
+1

你把C#和你的Java混合在一起了嗎? ;-) – 2010-01-09 20:57:05

+1

起初我以爲我寫的JavaScript代碼錯了:)你的意思是頭像。是的,我從Java遷移了C#,我喜歡咖啡:) – JCasso 2010-01-09 21:13:28

0

思想。 What is the "-->" operator in C++?

我認爲這種代碼風格源於編程的早期,當終端有限的顯示房地產。

+0

不,這是一個新的趨勢。它是句法糖,當我接近零時閱讀。有些人喜歡它。有些人會感到困惑。這真的取決於你已經習慣了看或不見的天氣。有點像正則表達式:當你第一次看到它時,你想猛烈地吐在鍵盤上,然後你就會喜歡它。 – slebetman 2010-01-09 21:04:19

+0

呵呵,你每天都會學到新的東西。我不是一個很大的粉絲,我不得不承認我 - > 0對我來說更好。 – ncremins 2010-01-09 21:10:19

+1

我很欣賞' - >'運算符,但沒有多少年的正則表達式使用阻止了我的嘔吐:-) – bobince 2010-01-10 00:27:20

1

其他解答解釋說,它是兩個操作員。我只是在示例中添加它,這是沒有必要的。如果你從一個正整數倒數到零,你可以錯過大於零的測試,並且你的代碼會更短,我認爲更清晰:

var i = 10; 
while (i--) { 
    // Do stuff; 
}