Warum funktioniert aaa = 1,2,3und setzt den Wert von aaaauf 1?
Warum funktioniert das nicht var bbb = 1,2,3?
Warum funktioniert var bbb = (1,2,3)und setzt den Wert von bbbauf 3?

Warum funktioniert aaa = 1,2,3und setzt den Wert von aaaauf 1?
Warum funktioniert das nicht var bbb = 1,2,3?
Warum funktioniert var bbb = (1,2,3)und setzt den Wert von bbbauf 3?

Antworten:
Hier ist viel los, aber im Grunde kommt es auf den Komma-Operator an .
Der Kommaoperator wertet beide Operanden aus (von links nach rechts) und gibt den Wert des zweiten Operanden zurück.
Dieser Code:
aaa = 1,2,3
Ist äquivalent zu:
aaa = 1;
2;
3;
Es aaawird 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:
var bbb = 1,2,3
Ist ein Syntaxfehler, da Kommas in Variablendeklarationen verwendet werden, um mehrere Variablen in einer einzelnen Zeile zu deklarieren. Wie der MDN-Artikel hervorhebt,
Beachten Sie, dass das Komma in der
varAnweisung nicht der Kommaoperator ist, da es in einem Ausdruck nicht vorhanden ist. Es ist vielmehr ein Sonderzeichen invarAussagen, mehrere davon zu einem zu kombinieren.
Dieser Code entspricht also in etwa:
var bbb = 1;
var 2;
var 3;
Natürlich 2ist keine gültige Kennung, so dass es an diesem Punkt fehlschlägt.
Dieser Code:
var bbb = (1,2,3)
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:
1;
2;
var bbb = 3;
=in var bbb = 1;nicht dasselbe =wie in aaa = 1;- sie stammen aus verschiedenen Produktionen (Initialiser vs AssignmentExpression) in der Grammatik und verwenden zufällig dasselbe Token.
a = 1, 2, 3in Klammern gesetzt werden kann, als (a = 1), 2, 3was ausgewertet wird a = 1; 2; 3(und 3 zurückgibt, z. B. b = (a = 1, 2, 3)3 zu b zuweisen würde). Im Gegensatz dazu a = (1, 2, 3)bewertet als 1; 2; a = 3und gibt 3 zurück.
(1 + 2) * 3, die 1 + 2zuerst 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:
a = 1, 2, 3;
Es ist ein Operator, der einfach sein rechtes Argument zurückgibt. Es ist aber auch Teil der Syntax von varDeklarationen:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(wobei [...]bedeutet, dass der Teil optional ist). In Ihrer varDeklaration fehlen die Variablennamen nach den Kommas, sodass sie nicht analysiert werden. Sie könnten den gewünschten Effekt erzielen mit:
var a = (1, 2, 3);
Die Klammern erzwingen, dass die Kommas als Operatoren und nicht als Trennzeichen zwischen Variablendeklarationen behandelt werden.
In Ihren Beispielen wird das Komma in zwei Zusammenhängen verwendet:
var AussageDie Syntax der varAnweisung lautet:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Hier wird Komma verwendet, um Variablenname-Wert-Paare zu trennen. Folgendes funktioniert nicht, da ein Variablenname nicht mit einer Ziffer beginnen kann (siehe Bezeichnernamen ):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
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, 3;
aaa = 1, 2 ergibt 2
aaa = 1zuerst ausgewertet wird, da es =eine höhere Priorität als hat,2, 3 ergibt 3var bbb = (1, 2, 3);
(1, 2, 3)ergibt 3wie oben beschriebenbbbwird der Wert zugewiesen3aaa = 1, 2, 3=> Der Komma - Operator wird verwendet , um die folgenden drei Aussagen zu trennen: aaa=1, 2und 3. 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, berechnet 2und verwirft sie dann, berechnet 3und verwirft sie.
In dieser Sekunde:
var bbb = 1,2,3
Das varSchlü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.
var bbb = (1,2,3)
Hier wertet der Compiler dies zuerst aus 1und ignoriert es. Dann wertet es aus 2und ignoriert es. Dann wird es ausgewertet 3und 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 forAussehen nützlich .
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
var a1,a2,a3;deklariert einfach drei lokale Variablen.