web-dev-qa-db-fra.com

Que fait une virgule dans les expressions JavaScript?

Si j'utilise:

1.09 * 1; // returns "1.09"

Mais si j'utilise:

1,09 * 1; // returns "9"

Je sais que 1,09 n'est pas un nombre.

Que fait la virgule dans le dernier morceau de code?

Plus d'exemples

if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert

alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too

alert("2",
    foo = function (param) {
        alert(param)
    },
    foo('1')
)
foo('3'); // alerts 1, 2 and 3
73
Topera

L'opérateur par virgule évalue les deux opérandes (De gauche à droite) et Renvoie la valeur du deuxième opérande .

Source: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator

Par exemple, l'expression 1,2,3,4,5 est évaluée à 5. De toute évidence, l'opérateur de virgule n'est utile que pour les opérations ayant des effets secondaires.

75
Yuval Adam

Quelques autres alertes à prendre en compte:

alert((0, 9));
alert((9, 0));
alert(("foo", "bar"));

Consultez également la console Firebug si vous voulez essayer ceci de manière interactive.

5
Douglas

Regardez ici - la virgule représente plusieurs expressions/déclarations. Par exemple, dans votre code, vous pouvez utiliser une ligne comme celle-ci:

var a=0, b=0, c=0;

Cela déclarerait les trois variables sans écrire:

var a=0;
var b=0;
var c=0;

J'espère que cela pourra aider.

4
dhh
L'opérateur par virgule évalue les deux opérations de (De gauche à droite) et Renvoie la valeur de l'opérande second

https://stackoverflow.com/a/3561056/5934465

Ça devrait être comme ça!

L'opérateur de virgule évalue chacun de ses opérandes (de gauche à droite) et renvoie la valeur de l'opérande last.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

2
xgqfrms

Ajouter/modifier des propriétés à un objet et le renvoyer dans la même ligne est un cas d'utilisation possible:

console.log(
  ((x) => (o = {biggerCond: r => r >= x},
           o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
           o.isAnyBigger = o.r5.some(o.biggerCond),
           o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
  )(5e4)
);
// Example
// {
//   bigger: [58414, 56500, 63397],
//   isAnyBigger: true,
//   isBiggerCond: r => r >= x,
//   r5: [58414, 12015, 56500, 63397, 43861]
// }

La fonction anonyme ci-dessus renvoie un objet avec des valeurs aléatoires supérieures à la valeur d'entrée ou, s'il n'y en a pas, à la valeur d'entrée elle-même dans un tableau contenu dans la propriété bigger.

C'est toujours du sucre syntaxique (comme arrow functions ), mais cela raccourcit le nombre de lignes ... Je me demande si certains minificateurs JS détectent et ajustent le code automatiquement de la même manière. Exécutez-le dans votre console:

((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)
0
CPHPython