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:
En los antiguos analizadores de JavaScript, debemos concluir la condición entre paréntesis:
var t = (1 == 1) ? 1 : 0;
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.