w3schools ternario operator operadores operador logicos ejemplo javascript variable-assignment ternary

ternario - operadores logicos javascript



Operador ternario Javascript y asignaciĆ³n. (4)

Obtengo un resultado inesperado para esta simple declaración de asignación de JavaScript:

var t = 1 == 1 ? 1 : 0; undefined

Hubiera esperado obtener 1 asignado a v en su lugar. Mismo resultado si lo haces

var t = (1 == 1 ? 1 : 0); undefined

¿Alguien puede explicar por qué esto no funciona como se esperaba?


El resultado de evaluar var t = 1 == 1 ? 1 : 0; var t = 1 == 1 ? 1 : 0; en, digamos, la consola Firebug estará undefined . Sin embargo, el valor de t será 1 como se esperaba. Intenta dar salida t después de la asignación.

Firebug imprimirá el resultado cuando la declaración de la variable esté en una línea separada:

var t; t = 1 == 1 ? 1 : 0;

Esto se debe a que el valor de retorno de una operación de asignación es el valor que se asigna. Sin embargo, cuando la palabra clave var está presente, lo que se devuelve es el valor de la declaración VariableStatement, que se comporta de la siguiente manera:

La producción VariableStatement : var VariableDeclarationList ; se evalúa de la siguiente manera: Evaluar VariableDeclarationList . Regreso (normal, vacío, vacío).

Donde Return (normal, empty, empty). se refiere a un tipo reconocido internamente por JavaScript, no a algo que se imprima en la consola.

Otras lecturas:

http://ecma262-5.com/ELS5_HTML.htm#Section_12.2


En los antiguos analizadores de JavaScript, debemos concluir la condición entre paréntesis:

var t = (1 == 1) ? 1 : 0;


Este código funciona bien:

var t = 1 == 1 ? 1 : 0; alert (t);

Chequea here Muestra 1 .


Funciona perfectamente:

> var t = 1 == 1 ? 1 : 0; undefined > t 1

Se podría decir que el valor de retorno de la operación de asignación undefined está undefined , no el valor de t .

Edición: Pero en realidad si leo la especificación correctamente , parece que debería devolver el valor de la expresión.

Como mencionó @TJ Crowder, parece que la var es responsable del valor undefined . Pero eso no significa que no var usar var . El código que escribiste es 100% correcto.

Esto se relaciona más con el funcionamiento interno del lenguaje y creo que eso no es lo que le interesa. Para obtener más información al respecto, eche un vistazo a los comentarios.