2011-05-05 24 views
22

¿Puedo contar con que Javascript falla inmediatamente cuando una condición en una expresión resulta falsa?Evaluación de orden condicional de Javascript

f = {'a':'b'}; 
if (f.a !== undefined || f.a === 'b') { 
    // Is this OK to use, because the second condition will never be evaluated? 
} 
+1

Por lo que veo en el código de su segunda condición siempre se evalúa porque (f.a! == indefinido) es igual a verdadera. – a1ex07

+0

@ a1ex07 Gracias, corregidos. – ash

+0

La segunda condición se evaluará si la primera se evalúa como falsa. – RobG

Respuesta

41

Sí, esto se conoce como short circuit evaluation.

Con un operador lógico AND, si el primero es false, el segundo nunca se evalúa, porque la condición ya sabe lo suficiente como para cumplirse.

Con el operador lógico OR, si el primero es false, evaluará el segundo. De lo contrario, si el primero es true, no evaluará el segundo (no es necesario).

Ésta es la razón por la que se ve ...

var a = function(b) { 
    b = b || 7; 
} 
+1

The 'b = b || 7; 'la forma se usa a menudo como una forma abreviada de proporcionar un valor predeterminado para cuando b no está definido, sobre la base de que undefined se evalúa como falso, pero * esto en realidad no funciona * dado que b podría contener varios otros valores que todos evalúa también como falso (0, nulo, una cadena vacía, y por supuesto falso, todos son falsos). Por supuesto, si está seguro de que todos esos otros valores deben anularse con un valor predeterminado que está bien ... – nnnnnn

+0

@nnnnn No es perfecto, pero muchas veces es muy útil. – alex

+0

Creo que la forma correcta sería 'b = typeof b ==" undefined "? 7: b;' – JVE999

Cuestiones relacionadas