javascript syntax tuples comma-operator

Notación "tuple" de Javascript: ¿cuál es su punto?



syntax tuples (3)

Como ya se explicó, este comportamiento es causado por , operador. Debido a esto, la expresión (null,''cool'',false,NaN,4) siempre se evaluará como 4 . Entonces tenemos

",,," == Array(4)

Array(4) : crea un nuevo array con 4 elementos asignados. En el momento de la comparación con la cadena, esta matriz se convierte en cadena como lo sería con Array(4).toString() . Para matrices toString actúa como el método de join('','') llamado en esta matriz. Entonces, para la matriz vacía de 4 elementos, la unión producirá la cadena ",,," .

En wtfjs , encontré que lo siguiente es un javascript legal.

",,," == Array((null,''cool'',false,NaN,4)); // true

El argumento (null,''cool'',false,NaN,4) parece una tupla, ¡pero JavaScript no tiene tuplas!

Algunas pruebas rápidas en mi consola de javascript producen lo siguiente.

var t = (null,''cool'',false,NaN,4); // t = 4 (null,''cool'',false,NaN,4) === 4; // true (alert(''hello''), 42); // shows the alert and returns 42

Parece comportarse exactamente como un punto y coma ; lista separada de declaraciones, simplemente devolviendo el valor de la última declaración.

¿Hay alguna referencia en algún lugar que describa esta sintaxis y su semántica? ¿Por qué existe, es decir, cuándo debe usarse?


Estás viendo el efecto del operador de coma .

El operador de coma evalúa sus dos operandos (de izquierda a derecha) y devuelve el valor del segundo operando.

El valor resultante cuando se evalúa a a,b,c,...,n siempre será el valor de la expresión más a la derecha, sin embargo, todas las expresiones en la cadena aún se evalúan (de izquierda a derecha).


Pruebe esta alert((null,''cool'',false,NaN,4)) y luego podrá ver.

demo

La razón es porque el operador de coma evalúa todas las declaraciones y devuelve la última.

Piense en esta línea: a = 1, b = 2, c = 3; ejecutará cada expresión, por lo que en esencia establecerá las variables a lo que desea y devolverá el último valor (en este caso 3)