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
alert
toma solo un argumento. Cualquier cosa después de eso se descarta.arguments
objeto 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,5
evalú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
for
bucle.continue
puntos sin duplicación, pero entonces no debería tener múltiplescontinue
puntos.Algunos más para considerar:
console.log((0, 9)); console.log((9, 0)); console.log(("foo", "bar"));
fuente
alert("1", alert("2", alert("3")))
last
operando.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,d
es((((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
var
declaraciones 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
bigger
propiedad.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