2011-09-14 106 views
1

如果我有JavaScript可變增量評估?

a = 0; 
if(a++ < 1){ 
    console.log(a); 
} 

我在控制檯中值1。如果a隨着增量變成1,那麼爲什麼表達式是真實的?

如果我做

a = 0; 
if(++a < 1){ 
    console.log(a); 
} 

那我就不在控制檯得到任何東西,這意味着評估是假的表達。

我一直使用variable++來遞增for循環等變量。我已經看到了++variable,但我認爲這是另一種寫同樣的東西的方法。有人可以解釋發生了什麼,爲什麼?兩者有什麼區別?

++variable是否在評估時遞增變量,而variable++遞增?

+1

@查看[MDN算術運算符](https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators) – Andrew

+1

這已被問及許多次以前的回答。 –

回答

3

我看過++variable,但我認爲這是另一種寫同樣的東西的方法。

不,他們根本不一樣。

  • ++variable -Increment。 它遞增variable並評估爲新值。

  • variable++ is post -increment。 它遞增variable並評估爲舊值。

這對大多數C語言風格很常見,包括C本身,C++,PHP,Java和Javascript。

即:

是否++variable增量在評價時可變,variable++增量後一段時間?

是的,正好。 :)

2

這裏有一個非常重要的區別。 a++在評估後遞增,其中++a遞增之前評估。方便地,++的位置既可以在之前也可以在之後,所以這就是您如何記住哪個是哪個。

換句話說,這就是你有效地做什麼:

a = 0; 
if (a < 1) 
{ 
    a = a + 1; 
    console.log(a); 
} 
else 
{ 
    a = a + 1; 
} 
1

這是後遞增,所以比較是0,然後在塊語句是1

a = 0; 

// v-----0 < 1 
if(a++ < 1){ 
     // now a has been incremented to 1 
    console.log(a); 
} 

預遞增的版本是這樣的:

a = 0; 

// v-----1 < 1 
if(++a < 1){ 
     // evaluate to false, so this doesn't run 
    console.log(a); 
} 
1

++var增加了一個,然後做比較。

var++做比較,然後添加一個。

訣竅是在++之前的變量(增量發生之前)或變量之後(增量發生之後)記住它。