Si uso:
1.09 * 1; // returns "1.09"
Pero si uso:
1,09 * 1; // returns "9"
Sé que 1,09 no es un número.
¿Qué hace la coma en el último fragmento de código?
Más ejemplos
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
javascript
comma-operator
Topera
fuente
fuente

alerttoma solo un argumento. Cualquier cosa después de eso se descarta.argumentsobjeto en su lugar, que puede tener cualquier longitud). Incluso con JS compilado moderno, no habría forma de saber con anticipación cuántos argumentos tomaría una función. Considere esto:function test() { args=[]; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i] + 1); } ;el intérprete tendría que saber cómo se estaba utilizando la función para saber cuántos argumentos se necesitarían. En cambio, evalúa todo.Respuestas:
Fuente: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator
Por ejemplo, la expresión se
1,2,3,4,5evalúa como5. Obviamente, el operador de coma es útil solo para operaciones con efectos secundarios.console.log(1,2,3,4,5); console.log((1,2,3,4,5));fuente
forbucle.continuepuntos sin duplicación, pero entonces no debería tener múltiplescontinuepuntos.Algunos más para considerar:
console.log((0, 9)); console.log((9, 0)); console.log(("foo", "bar"));fuente
alert("1", alert("2", alert("3")))lastoperando.https://stackoverflow.com/a/3561056/5934465
¡Debería ser así!
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
fuente
a,b,c,des((((a),b),c),d)Eche un vistazo aquí : la coma representa múltiples expresiones / declaraciones. Por ejemplo, en su código, podría usar una línea como esta:
var a=0, b=0, c=0;Esto declararía las tres variables sin escribir:
var a=0; var b=0; var c=0;Espero que ayude.
fuente
vardeclaraciones no usan el operador de coma , aunque sea una coma) y (2) no puede separar declaraciones que utilizan los operadores de coma; solo se permiten expresiones.Agregar / modificar propiedades a un objeto y devolverlo en la misma línea es un posible caso de uso:
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 función anónima anterior devuelve un objeto con valores aleatorios mayores que el valor de entrada o, si no hay ninguno, con el valor de entrada en sí en una matriz contenida en la
biggerpropiedad.Sigue siendo azúcar sintáctico (como funciones de flecha ), pero acorta el número de líneas ... Me pregunto si algunos minificadores JS detectan y ajustan el código de manera similar automáticamente. Ejecútelo en su consola:
((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)fuente