Funktioniert die Zuweisung mit Komma?

Lesezeit: 4 Minuten

Benutzer-Avatar
Shankar Cabus

Warum tut aaa = 1,2,3 arbeiten und den Wert von festlegen aaa zu 1?

Warum nicht var bbb = 1,2,3 Arbeit?

Warum tut var bbb = (1,2,3) arbeiten und den Wert von festlegen bbb zu 3?

Beispiel einer Konsolensitzung

  • Sie erhalten den Syntaxfehler, weil Variablennamen nicht mit einer Zahl beginnen dürfen. var a1,a2,a3; deklariert einfach drei lokale Variablen.

    – Jared Farrish

    31. März 2014 um 22:35 Uhr

Benutzer-Avatar
pswg

Hier ist viel los, aber im Grunde kommt es auf die Komma-Operator.

Der Kommaoperator wertet seine beiden Operanden (von links nach rechts) aus und gibt den Wert des zweiten Operanden zurück.


Dieser Code:

aaa = 1,2,3

Ist äquivalent zu:

aaa = 1;
2;
3;

So aaa wird implizit deklariert und erhält den Wert 1. 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 betont,

Beachten Sie, dass das Komma in der var Aussage ist nicht den Komma-Operator, da er in einem Ausdruck nicht vorhanden ist. Vielmehr handelt es sich um ein Sonderzeichen in var Anweisungen, um mehrere davon zu einer zu kombinieren.

Dieser Code ist also ungefähr äquivalent zu:

var bbb = 1;
var 2;
var 3;

Na sicher, 2 ist kein gültiger Bezeichner, daher schlägt es an diesem Punkt fehl.


Dieser Code:

var bbb = (1,2,3)

Ist dem ersten sehr ähnlich, außer dass die numerischen Werte in Klammern eingeschlossen sind und zuerst ausgewertet werden. Das ist also ungefähr äquivalent zu:

1;
2;
var bbb = 3;

  • Noch mehr, die = in var bbb = 1; ist nicht das gleiche = wie in aaa = 1; – Sie stammen aus verschiedenen Produktionen (Initialiser vs AssignmentExpression) in der Grammatik und verwenden zufällig das gleiche Token.

    – Ryan Cavanaugh

    1. April 2014 um 2:53 Uhr

  • Sehr schöne Erklärung. Was nicht ganz explizit war, war das a = 1, 2, 3 kann eingeklammert werden als (a = 1), 2, 3 was als bewertet wird a = 1; 2; 3 (und gibt 3 zurück, z b = (a = 1, 2, 3) würde 3 b) zuordnen. Im Gegensatz, a = (1, 2, 3) wertet als 1; 2; a = 3 und kehrt zurück 3.

    – CompuChip

    1. April 2014 um 19:05 Uhr

  • Was sagt die MDN über Klammern bei der Variablenzuweisung und warum ist es umgekehrt? Ich konnte das Dokument nicht finden

    – Ingenieur2021

    2. April 2014 um 13:27 Uhr

  • @staticx Nichts wird wirklich “umgekehrt” gemacht. Die Klammern werden zuerst ausgewertet. Genau wie wenn Sie haben (1 + 2) * 3das 1 + 2 wird zuerst ausgewertet und das Ergebnis dieses Ausdrucks wird für den Rest der Auswertung wieder in den äußeren Ausdruck eingesetzt.

    – pswg

    2. April 2014 um 15:44 Uhr


Komma hat mehrere Verwendungen in Javascript. Im Ausdruck:

a = 1, 2, 3;

Es ist ein Operator, der einfach sein rechtes Argument zurückgibt. Aber es ist auch Teil der Syntax von var Erklärungen, die sind:

var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;

(wo [...] bedeutet, dass Teil optional ist). Dein var Bei der Deklaration fehlen die Variablennamen nach den Kommas, sodass sie nicht analysiert wird. Sie können 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.

Benutzer-Avatar
Salmann A

In Ihren Beispielen wird das Komma in zwei Kontexten verwendet:

var Aussage

Die Syntax von var Aussage ist:

var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

Hier wird das Komma verwendet, um Variablenname-Wert-Paare zu trennen. Folgendes funktioniert nicht, da ein Variablenname nicht mit einer Ziffer beginnen darf (siehe Bezeichnernamen):

var bbb = 1, 2, 3;
// SyntaxError: Unexpected number

Komma-Operator

Der Kommaoperator wertet seine beiden Operanden (von links nach rechts) aus 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
    • beachten Sie, dass aaa = 1 wird zuerst ausgewertet, weil = hat eine höhere Priorität als ,
  • 2, 3 ergibt 3
var bbb = (1, 2, 3);
  • der Ausdruck (1, 2, 3) Erträge 3 wie oben beschrieben
  • Die Variable bbb wird der Wert zugewiesen 3

  • aaa = 1, 2, 3 => Der Komma-Operator wird verwendet, um die folgenden 3 Anweisungen zu trennen: aaa=1, 2 und 3. Das Ergebnis des Komma-Operators ist der Wert der letzten Anweisung 3. Allerdings wird aaa der Wert 1 zugewiesen, wie auf dem Screenshot des OP deutlich zu sehen ist. Der Grund dafür ist die Operator-Präzedenz, wobei der Komma-Operator die niedrigste Priorität hat.

    – Tibos

    1. April 2014 um 8:59 Uhr

Im ersten Fall:

aa = 1,2,3

die Kommas dienen als Trennzeichen für Ausdrücke. Es führt eine Zuweisung an aus aaadann rechnet es 2 und verwirft es, dann rechnet es 3 und verwirft es.

In dieser Sekunde:

var bbb = 1,2,3

Das var Schlüsselwort teilt dem Javascript-Compiler mit, dass das nächste Ding nach a , sollte ein anderer Variablenname sein. Es findet nicht weiter, also stirbt es und würgt.

var bbb = (1,2,3)

Hier wertet der Compiler zunächst aus 1 und ignoriert es. Dann wertet es aus 2 und ignoriert es. Dann wertet es aus 3 und das auf dem Stapel gelassen wird, damit es zugewiesen wird bbb

Während die Verwendung von Kommas zum Trennen von Ausdrücken nicht üblich ist, ist es manchmal nützlich in Dingen wie for sieht aus.

for (i = 0, l = 10; i < l; i++) {
  console.log(i);
}

1215750cookie-checkFunktioniert die Zuweisung mit Komma?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy