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.
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)