2009-12-28 61 views
5

例如這樣的:理解遞增

var a = 123; 
var b = a++; 

現在a包含124b包含123

據我所知,b爲取的值,然後被遞增。但是,我不明白爲什麼會這樣。 JavaScript創作者爲什麼會這麼想的主要原因。除了混淆新手之外,其他的優勢是什麼?

+3

有Javascript和PHP之間沒有差異在增量運算符的行爲中。 – Asaph 2009-12-28 07:38:21

+1

雖然您可能正在使用JavaScript編寫此代碼,但此行爲與大多數(任何?)C風格語言相同。 – 2009-12-28 07:41:15

+0

謝謝大家的回覆。 所以這必須與面向對象編程有關。以過程的方式使用PHP這麼長時間以來,我一直期待每當一個變量位於任何運算符的左側時,它將始終保持它以前的值,除非它已被直接重新分配。 這對我來說是一種截然不同的思維方式,而我現在必須習慣這種方式。 – Chad 2009-12-28 07:43:32

回答

8

這就是爲什麼它被稱爲「後遞增算子」。基本上,一切都是表達式這會產生一個值。 a + 1是一個導致值爲124的表達式。如果使用b = a + 1將其分配給b,則b的值爲124。如果您沒有將結果分配給任何東西,a + 1仍然會導致值124,因爲您不會在任何地方「捕捉」它,所以它會立即被丟棄。

順便說一句,甚至b = a + 1是返回124所得到的賦值表達式的值是所分配的值的表達式。這就是爲什麼c = b = a + 1按照您的預期工作。

無論如何,++--的表達式的特殊之處在於除了返回一個值之外,++運算符還直接修改該變量。那麼當你做b = a++時會發生什麼,表達式a++返回值123並增加a。該增量器將首先返回值,然後增量,而增量器++a第一增量,則返回值。如果您只是自己寫了a++而沒有分配,那麼您將不會注意到其中的差異。這就是通常使用a++的方式,因爲a = a + 1是短手。

這是非常標準的。

+0

很好的答案。我的想法是:爲什麼如果a = 2和b = a + 1,我們得到b = 3並且a保持其原始值。但是自動增量是編程語言中的SPECIAL特性,不僅僅意味着添加1 這就是我困惑的地方,但現在我明白了。 – Chad 2009-12-28 07:53:36

5

注意,你也可以寫

b = ++a; 

其中有你可能期待的效果。

重要的是要認識到這裏有兩件事情:分配和增量以及語言應該定義它們將以何種順序發生。由於我們有++aa++,所以它們應該有不同的含義。

對於我們這些來自C背景的人來說,這很自然。如果PHP的行爲不同,我們可能會想知道爲什麼PHP選擇偏離我們習慣的。

-2

後增加和預增量是許多語言中的常見操作符,JavaScript從第一個開始就是大約30年。 PHP也支持後期增量。

3

++可以在例如用作遞增運算符一樣,或者如果之前變量使用它可以被用作預先遞增運算符。

var b = ++a; 

然後第一可變a將遞增,則增加的值被分配給b

1

這是做這件事的標準方式。後增加操作員分配值然後遞增。

預增量(++a)運算符遞增,然後進行賦值。

我不熟悉PHP,不能說它是如何做到這一點或爲什麼。

0

當你把++變量,它就會轉讓後遞增。你也可以在之前加上++這個變量,並且在之前把它賦值爲

Javascript實際上的行爲完全是就像前綴和後綴遞增PHP一樣。

0

++之前可變呼叫預增量裝置執行語句之前遞增變量的值。
++變量後稱爲後增量意味着在執行語句後增加變量的值。

都會增加變量的值。

$b=$a++;相當於

$b=$a;//after 
$a=$a+1; 

$ B = ++ $一個;`相當於

$a=$a+1;//before 
$b=$a; 

又如

$a=5; 
echo $a++;//prints 5; 

$a=5; 
echo ++$a;//prints 6;