2011-01-25 49 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