Warum funktioniert aaa = 1,2,3
und setzt den Wert von aaa
auf 1
?
Warum funktioniert das nicht var bbb = 1,2,3
?
Warum funktioniert var bbb = (1,2,3)
und setzt den Wert von bbb
auf 3
?
javascript
syntax
Shankar Cabus
quelle
quelle
var a1,a2,a3;
deklariert einfach drei lokale Variablen.Antworten:
Hier ist viel los, aber im Grunde kommt es auf den Komma-Operator an .
Dieser Code:
Ist äquivalent zu:
Es
aaa
wird also implizit deklariert und der Wert 1 zugewiesen. Beachten Sie, dass die Ausgabe auf der Konsole das Ergebnis der letzten Anweisung 3 ist.Dieser Code:
Ist ein Syntaxfehler, da Kommas in Variablendeklarationen verwendet werden, um mehrere Variablen in einer einzelnen Zeile zu deklarieren. Wie der MDN-Artikel hervorhebt,
Dieser Code entspricht also in etwa:
Natürlich
2
ist keine gültige Kennung, so dass es an diesem Punkt fehlschlägt.Dieser Code:
Ist der ersten sehr ähnlich, außer dass die numerischen Werte in Klammern gesetzt werden und zuerst ausgewertet werden. Das ist also ungefähr gleichbedeutend mit:
quelle
=
invar bbb = 1;
nicht dasselbe=
wie inaaa = 1;
- sie stammen aus verschiedenen Produktionen (Initialiser vs AssignmentExpression) in der Grammatik und verwenden zufällig dasselbe Token.a = 1, 2, 3
in Klammern gesetzt werden kann, als(a = 1), 2, 3
was ausgewertet wirda = 1; 2; 3
(und 3 zurückgibt, z. B.b = (a = 1, 2, 3)
3 zu b zuweisen würde). Im Gegensatz dazua = (1, 2, 3)
bewertet als1; 2; a = 3
und gibt 3 zurück.(1 + 2) * 3
, die1 + 2
zuerst und das Ergebnis dieser Ausdruck ausgewertet wird wieder in den äußeren Ausdruck für den Rest der Auswertung ersetzt.Komma wird in Javascript mehrfach verwendet. Im Ausdruck:
Es ist ein Operator, der einfach sein rechtes Argument zurückgibt. Es ist aber auch Teil der Syntax von
var
Deklarationen:(wobei
[...]
bedeutet, dass der Teil optional ist). In Ihrervar
Deklaration fehlen die Variablennamen nach den Kommas, sodass sie nicht analysiert werden. Sie könnten den gewünschten Effekt erzielen mit:Die Klammern erzwingen, dass die Kommas als Operatoren und nicht als Trennzeichen zwischen Variablendeklarationen behandelt werden.
quelle
In Ihren Beispielen wird das Komma in zwei Zusammenhängen verwendet:
var
AussageDie Syntax der
var
Anweisung lautet:Hier wird Komma verwendet, um Variablenname-Wert-Paare zu trennen. Folgendes funktioniert nicht, da ein Variablenname nicht mit einer Ziffer beginnen kann (siehe Bezeichnernamen ):
Komma-Operator
Der Kommaoperator wertet beide Operanden aus (von links nach rechts) und gibt den Wert des zweiten Operanden zurück. Die folgenden Ausdrücke funktionieren wie folgt:
aaa = 1, 2
ergibt 2aaa = 1
zuerst ausgewertet wird, da es=
eine höhere Priorität als hat,
2, 3
ergibt 3(1, 2, 3)
ergibt3
wie oben beschriebenbbb
wird der Wert zugewiesen3
quelle
aaa = 1, 2, 3
=> Der Komma - Operator wird verwendet , um die folgenden drei Aussagen zu trennen:aaa=1
,2
und3
. Das Ergebnis des Kommaoperators ist der Wert der letzten Anweisung 3. aaa wird jedoch der Wert 1 zugewiesen, wie aus dem Screenshot des OP deutlich hervorgeht. Der Grund dafür ist die Operator-Priorität, wobei der Komma-Operator die niedrigste Priorität hat.Im ersten Fall:
aaa = 1,2,3
Die Kommas dienen als Ausdruckstrennzeichen. Es führt eine Zuordnung zu aus
aaa
, berechnet2
und verwirft sie dann, berechnet3
und verwirft sie.In dieser Sekunde:
Das
var
Schlüsselwort teilt dem Javascript-Compiler mit, dass das nächste nach a ein,
anderer Variablenname sein sollte. Es findet nicht weiter, also stirbt es und würgt.Hier wertet der Compiler dies zuerst aus
1
und ignoriert es. Dann wertet es aus2
und ignoriert es. Dann wird es ausgewertet3
und das bleibt auf dem Stapel, so dass es zugewiesen wirdbbb
Während die Verwendung von Kommas zum Trennen von Ausdrücken nicht üblich ist, ist sie manchmal in Dingen wie dem
for
Aussehen nützlich .quelle