2010-12-01 11 views

Respuesta

10

Si foo ya está definido y se evalúa como verdadera, se establece foo = foo, es decir, que no hace nada.

Si se define foo pero se evalúa como falsa, sería lo emergente se foo (false, null, undefined, cadena vacía, 0, NaN), pero desde alert vuelve nada, foo se establecerá en undefined.

Si foo aún no está definido, se lanzará una excepción. (Edit: En su ejemplo, foo siempre se definirá debido a la declaración var foo.)

4

Si foo evalúa a falso (por ejemplo, falso, nulo o cero), también se evalúa el valor después del operador ||, y muestra el valor.

El método alert no devuelve ningún valor, por lo que foo quedará indefinido si se evalúa como falso, de lo contrario se le asignará su propio valor.

+0

¿No está asignado? Es un rvalue – Hogan

+0

@Hogan: Sí, está asignado. – Guffa

+0

'alerta (foo)' devuelve indefinido. –

3
var foo; 

if (foo) 
    foo = foo; 
else 
    foo = alert(foo); // probably undefined 
+1

@Hogan:> * alerta (foo); es un lvalue no un rvalue *. ¿Qué? –

+0

@Crescent: nevermind: término C que no se aplica aquí. – Hogan

Cuestiones relacionadas