2009-12-28 26 views
5

Zum Beispiel das Inkrementieren:Verständnis

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

jetzt a enthält 124 und b enthält 123

Ich verstehe, dass b den Wert von a nimmt und dann wird ein erhöht wird. Ich verstehe jedoch nicht, warum das so ist. Der Hauptgrund dafür, warum die Schöpfer von JavaScript dies wollen. Was ist der Vorteil für andere als verwirrende Neulinge?

+3

Es gibt keinen Unterschied zwischen Javascript und PHP im Verhalten des Inkrementoperators. – Asaph

+1

Obwohl Sie dies in JavaScript schreiben, ist dieses Verhalten das gleiche wie die meisten (jeder?) C-Stil Sprache. –

+0

Vielen Dank für Ihre Antwort. Das muss also etwas mit objektorientierter Programmierung zu tun haben. Nachdem ich PHP so lange benutzt habe, bin ich in der prozeduralen Art davon ausgegangen, dass immer, wenn sich eine Variable auf der linken Seite eines Operators befindet, sie immer ihren vorherigen Wert behält, es sei denn, sie wurde direkt neu zugewiesen. Das ist eine radikal andere Denkweise für mich, an die ich mich jetzt gewöhnen muss. – Chad

Antwort

8

Deshalb wird es der "post-inkrementierende Operator" genannt. Im Wesentlichen ist alles ein Ausdruck, was zu einem Wert führt. a + 1 ist ein Ausdruck, der den Wert 124 ergibt. Wenn Sie dies b mit b = a + 1 zuweisen, hat b den Wert 124.Wenn Sie das Ergebnis nichts zuweisen, wird a + 1 immer noch den Wert 124 ergeben, es wird sofort verworfen, da Sie es nirgendwo "fangen".

BTW, auch b = a + 1 ist ein Ausdruck, der 124 zurückgibt. Der resultierende Wert eines Zuweisungsausdrucks ist der zugewiesene Wert. Deshalb funktioniert c = b = a + 1 so, wie Sie es erwarten würden.

Das Besondere an einem Ausdruck mit ++ und -- ist, dass der Operator ++ zusätzlich zur Rückgabe eines Werts die Variable direkt ändert. Was passiert also, wenn Sie b = a++ ist, der Ausdruck a++ gibt den Wert 123 zurück und erhöht a. Die Post Inkrementierer kehrt zuerst den Wert, dann Inkremente, während die pre Inkrementierer ++aersten Inkremente, dann den Wert zurückgibt. Wenn Sie nur a++ selbst ohne Zuordnung geschrieben haben, werden Sie den Unterschied nicht bemerken. So wird üblicherweise a++ verwendet, als Short-Hand für a = a + 1.

Dies ist ziemlich Standard.

+0

Gute Antwort.Mein Denken war: Warum, wenn a = 2 und b = a + 1, erhalten wir b = 3 und a behält seinen ursprünglichen Wert. Aber Autoincrement ist SPECIAL-Funktion in Programmiersprachen, die nicht nur ADD 1 und das ist, wo ich verwirrt war, aber jetzt verstehe ich es. – Chad

5

Beachten Sie, dass Sie auch

b = ++a; 

, die die Wirkung hat schreiben können Sie wahrscheinlich erwarten sind.

Es ist wichtig zu erkennen, dass hier zwei Dinge vor sich gehen: Die Zuweisung und das Inkrement und die Sprache sollten definieren, in welcher Reihenfolge sie passieren. Wie wir sowohl ++a als auch a++ zur Verfügung haben, macht es Sinn, dass sie unterschiedliche Bedeutungen haben sollten.

Für diejenigen von uns von einem C-Hintergrund ist dies ziemlich natürlich. Wenn sich PHP anders verhält, fragen wir uns vielleicht, warum PHP von dem abwich, was wir gewohnt sind.

-2

Post-Inkrement und Pre-Increment sind häufige Operatoren in vielen Sprachen, wobei Javascript etwa 30 Jahre alt ist. PHP unterstützt auch Post-Inkremente.

3

++ kann als Post-Inkrement-Operator wie in Ihrem Beispiel verwendet werden, oder es könnte als Vorinkrementoperator vor Variable verwendet werden.

var b = ++a; 

Dann zuerst die Variable a wird inkrementiert werden, dann wird der erhöhte Wert zu b zugeordnet.

1

Dies ist die Standardmethode. Der postincrement-Operator weist den Wert zu und erhöht dann.

Der Vorinkrement (++a) Operator wird inkrementiert und dann zugewiesen.

Ich bin nicht vertraut mit PHP und kann nicht sagen, wie es funktioniert oder warum.

0

Wenn Sie die ++nach die Variable setzen, wird es nach die Zuordnung erhöht. Sie können auch die ++vor die Variable setzen und es wird vor die Zuordnung erhöht.

Javascript verhält sich tatsächlich genau auf die gleiche Weise wie PHP für Präfix und Postfix inkrementieren.

0

++ Vor Variablenaufruf Vorinkrement bedeutet, dass der Wert der Variablen erhöht wird, bevor die Anweisung ausgeführt wird.
++ nach Variable namens post-increment bedeutet, dass der Wert der Variablen nach Ausführung der Anweisung erhöht wird.

beide erhöhen den Wert der Variablen.

$b=$a++; entspricht

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

$ b = ++ $ a; `zu

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

Ein weiteres Beispiel

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

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