例如這樣的:理解遞增
var a = 123;
var b = a++;
現在a
包含124
和b
包含123
據我所知,b爲取的值,然後被遞增。但是,我不明白爲什麼會這樣。 JavaScript創作者爲什麼會這麼想的主要原因。除了混淆新手之外,其他的優勢是什麼?
例如這樣的:理解遞增
var a = 123;
var b = a++;
現在a
包含124
和b
包含123
據我所知,b爲取的值,然後被遞增。但是,我不明白爲什麼會這樣。 JavaScript創作者爲什麼會這麼想的主要原因。除了混淆新手之外,其他的優勢是什麼?
這就是爲什麼它被稱爲「後遞增算子」。基本上,一切都是表達式這會產生一個值。 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
是短手。
這是非常標準的。
很好的答案。我的想法是:爲什麼如果a = 2和b = a + 1,我們得到b = 3並且a保持其原始值。但是自動增量是編程語言中的SPECIAL特性,不僅僅意味着添加1 這就是我困惑的地方,但現在我明白了。 – Chad 2009-12-28 07:53:36
注意,你也可以寫
b = ++a;
其中有你可能期待的效果。
重要的是要認識到這裏有兩件事情:分配和增量以及語言應該定義它們將以何種順序發生。由於我們有++a
和a++
,所以它們應該有不同的含義。
對於我們這些來自C背景的人來說,這很自然。如果PHP的行爲不同,我們可能會想知道爲什麼PHP選擇偏離我們習慣的。
後增加和預增量是許多語言中的常見操作符,JavaScript從第一個開始就是大約30年。 PHP也支持後期增量。
++
可以在例如用作遞增運算符一樣,或者如果之前變量使用它可以被用作預先遞增運算符。
var b = ++a;
然後第一可變a
將遞增,則增加的值被分配給b
。
這是做這件事的標準方式。後增加操作員分配值然後遞增。
預增量(++a
)運算符遞增,然後進行賦值。
我不熟悉PHP,不能說它是如何做到這一點或爲什麼。
當你把++
後變量,它就會轉讓後遞增。你也可以在之前加上++
這個變量,並且在之前把它賦值爲。
Javascript實際上的行爲完全是就像前綴和後綴遞增PHP一樣。
++
之前可變呼叫預增量裝置執行語句之前遞增變量的值。
++
變量後稱爲後增量意味着在執行語句後增加變量的值。
都會增加變量的值。
$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;
有Javascript和PHP之間沒有差異在增量運算符的行爲中。 – Asaph 2009-12-28 07:38:21
雖然您可能正在使用JavaScript編寫此代碼,但此行爲與大多數(任何?)C風格語言相同。 – 2009-12-28 07:41:15
謝謝大家的回覆。 所以這必須與面向對象編程有關。以過程的方式使用PHP這麼長時間以來,我一直期待每當一個變量位於任何運算符的左側時,它將始終保持它以前的值,除非它已被直接重新分配。 這對我來說是一種截然不同的思維方式,而我現在必須習慣這種方式。 – Chad 2009-12-28 07:43:32