2011-09-14 44 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++做比较,然后添加一个。

诀窍是在++之前的变量(增量发生之前)或变量之后(增量发生之后)记住它。