L'affectation avec une virgule fonctionne-t-elle?

Pourquoi aaa = 1,2,3 fonctionne-t-il et définit-il la valeur de aaa à 1 ?

Pourquoi var bbb = 1,2,3 fonctionne pas?

Pourquoi var bbb = (1,2,3) fonctionne-t-il et définissez-vous la valeur de bbb à 3 ?

Exemple de session de la console

Il y a beaucoup de choses ici, mais, en gros, cela revient à l' opérateur de comes.

L'opérateur de coma évalue ses deux opérandes (de gauche à droite) et renvoie la valeur du second opérande.


DdddddddélMMM HébergementTemetteMachinetteMachélMachéMachea

 aaa = 1,2,3 

Est équivalent à:

 aaa = 1; 2; 3; 

Ainsi, aaa est implicitement déclaré et a attribué une valeur de 1. Notez que la sortie sur la console est le résultat de la dernière déclaration, 3.


DdddddddélMMM HébergementTemetteMachinetteMachélMachéMachea

 var bbb = 1,2,3 

Est une erreur de syntaxe car les virgules dans les déclarations de variables sont utilisées pour déclarer plusieurs variables en une seule ligne. Comme le souligne l'article de MDN,

Notez que la virgule dans l'instruction var n'est pas l'opérateur de virgule, car elle n'existe pas dans une expression. Plutôt, il s'agit d'un caractère spécial dans les relevés var pour combiner plusieurs d'entre eux en un seul.

Donc, ce code équivaut à peu près à:

 var bbb = 1; var 2; var 3; 

Bien sûr, 2 n'est pas un identifiant valide, donc il échoue à ce point.


DdddddddélMMM HébergementTemetteMachinetteMachélMachéMachea

 var bbb = (1,2,3) 

Est très similaire à la première, sauf que les valeurs numériques sont enveloppées entre parenthèses, elles sont d'abord évaluées. Donc, cela équivaut à:

 1; 2; var bbb = 3; 

Comma a plusieurs utilisations en Javascript. Dans l'expression:

 a = 1, 2, 3; 

C'est un opérateur qui renvoie simplement son argument de droite. Mais cela fait également partie de la syntaxe des déclarations var , qui sont:

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

(Où [...] signifie que cette partie est facultative). Votre déclaration var manque de nom de variable après les virgules, donc il ne pas analyser. Vous pourriez avoir l'effet que vous vouliez avec:

 var a = (1, 2, 3); 

Les parenthèses forcent les virgules à être considérées comme des opérateurs plutôt que des délimiteurs entre des déclarations variables.

Dans vos exemples, la virgule est utilisée dans deux contextes:

var

L'instruction syntaxe de var est:

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

Ici, la virgule sert à séparer les paires nom-valeur variable. Ce qui suit ne fonctionnera pas car un nom de variable ne peut pas commencer par un chiffre (voir les noms d'identifiant ):

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

Opérateur de virgules

L'opérateur de coma évalue ses deux opérandes (de gauche à droite) et renvoie la valeur du second opérande. Les expressions suivantes fonctionnent comme suit:

 aaa = 1, 2, 3; 
  • aaa = 1, 2 donne 2
    • Notez que aaa = 1 est évalué en premier parce que = a une priorité plus élevée que ,
  • 2, 3 donne 3
 var bbb = (1, 2, 3); 
  • L'expression (1, 2, 3) donne 3 comme décrit ci-dessus
  • La variable bbb reçoit la valeur 3

Dans le premier cas:

Aaa = 1,2,3

Les virgules servent de séparateurs d'expressions. Il effectue une affectation à aaa , puis il calcule 2 et le jette, puis il calcule 3 et le rejette.

Dans la seconde:

 var bbb = 1,2,3 

Le mot-clé var indique au compilateur Javascript que la prochaine chose après a , devrait être un autre nom de variable. Il ne se trouve pas sur, donc il meurt et gags.

 var bbb = (1,2,3) 

Ici, le compilateur évalue d'abord 1 et l'ignore. Ensuite, il évalue 2 et l'ignore. Ensuite, il évalue 3 et cela reste sur la pile, donc il est affecté à bbb

En utilisant des virgules pour séparer des expressions n'est pas commun, il est parfois utile dans des choses comme for regards.

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