Je suis tombé sur une syntaxe javascript qui semblait produire une erreur d'analyse, mais ne le fait pas:
if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid
if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid
Il semble que seule la dernière expression affecte la logique, bien que toutes les expressions soient exécutées:
if (console.log('super'), true) {console.log('splendid')} // super splendid
Quelqu'un sait pourquoi c'est une syntaxe javascript valide? Y a-t-il une utilité pratique pour cela?
L'opérateur virgule enchaîne plusieurs expressions et le résultat de l'opération est la valeur du dernier opérande. La seule utilisation réelle est lorsque vous avez besoin de plusieurs effets secondaires, tels que des appels d'affectation ou de fonction.
L'opérateur virgule évalue chacun de ses opérandes (de gauche à droite) et renvoie la valeur du dernier opérande.
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Expressions_and_Operators#comma_operator
les virgules en javascript sont en fait assez obscures. L'usage le plus cool que j'ai vu est celui-ci
while(doSomething(), checkIfSomethingHappened());
le plus courant serait la façon dont var est utilisé dans les js modernes
var foo = 1,
bar = 2;
C'est également le même que dans la plupart des autres langages de programmation où vous pouvez avoir plusieurs itérateurs dans une boucle.
int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}
Je permet de faire des opérations et des comparaisons dans le même contexte.
Exemple:
if(a = 2, a > 1) console.log('a is', a)