2011-01-25 52 views
1

在下面的例子一个JavaScript语言的问题

<!DOCTYPE html> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<script> 
    var str = '11'; 
    str = str++; 
    alert(str); // 11 
</script> 

为什么结果11,而不是12

在这个例子中,结果是12

<!DOCTYPE html> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<script> 
    var str = '11'; 
    str++; 
    alert(str); // 12 
</script> 

为什么会这样呢?

谢谢!


var str = 10; 
var re = str++; 
alert(re); // 10 
alert(str); // 11 

str将返回10 re第一,然后递增str自己11

var str = 10; 
var str = str++; 
alert(str); // 10 

在这种情况下,str回报10 str第一,和那么str应该将str自身增加到11.

但事实并非如此。任何人都可以解释吗?

谢谢!

回答

11

发生这种情况的原因是因为后增量(str++)的返回值是之前的值递增。

实施例:

var x = 10; 
alert(x++); //10, because return value is value before increment 
alert(x); //11 because the variable was incremented on the previous line 

来解决这个问题的方式是使用预先递增运营商,这是简单地将操作者++之前其操作数(++str)。这将在操作数上加1,并返回新值 - 与后增值操作符(str++)相反,后者将操作数加1并返回旧值

例子:

var x = 10; 
alert(++x); //11 

顺便说一句,语句str = str++真正的疑难杂症。之所以:

表达str++返回原来的价值,因此,当您重新分配给str,你基本上是重新分配旧值str。因此,变量的零突变和你回到原点之一

这里是你的代码应该如何看起来像:

<!DOCTYPE html> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<script> 
    var str = '11'; 
    alert(++str); // 12 
</script> 
1

运算符++的表达式首先计算为11,然后递增str的值。

尝试++str。它将返回12.

+3

然后 - 不要忘记 - 分配增量前的值,增量后,所以你最终又回到你开始的地方! :) – 2011-01-25 05:12:52

+0

@Ken你说得对。 – Marcelo 2011-01-25 05:14:47