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?
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
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.
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.
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.
L'opérateur par virgule évalue les deux opérations de (De gauche à droite) et Renvoie la valeur de l'opérandesecond
.
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
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)