O que uma vírgula faz em expressões JavaScript?

Se eu usar:

1.09 * 1; // returns "1.09" 

Mas se eu usar:

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

Eu sei que 1,09 não é um número.

O que a vírgula faz no último trecho de código?

Mais exemplos

 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 

    O operador vírgula avalia seus dois operandos (da esquerda para a direita) e retorna o valor do segundo operando.

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

    Por exemplo, a expressão 1,2,3,4,5 avaliada como 5 . Obviamente, o operador de vírgula é útil apenas para operações com efeitos colaterais.

    Mais alguns alertas a considerar:

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

    Além disso, dê uma olhada no console do Firebug se quiser testá-lo de forma interativa.

    Dê uma olhada aqui – a vírgula significa várias expressões / instruções. Por exemplo, no seu código você poderia usar uma linha como esta:

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

    Isto declararia todas as três variables ​​sem escrever:

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

    Espero que ajude.

    O operador vírgula avalia seus dois operandos (da esquerda para a direita) e retorna o valor do second operando.

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

    Deveria ser assim!

    O operador vírgula avalia cada um de seus operandos (da esquerda para a direita) e retorna o valor do last operando.

    https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Comma_Operator

    Adicionar / modificar propriedades a um object e retorná-lo na mesma linha é um possível 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] // }