2009-12-31 14 views
39

Possible Duplicate:
Detecting an undefined object property in JavaScriptcómo manejar 'indefinido' en javascript

Desde el siguiente ejemplo JavaScript

try { 
    if(jsVar) { 
    proceed(); 
     } 
}catch(e){ 
     alert(e); 
} 

este jsVar se declara y rubricado en otros js finas.

El problema es que el código arroja un error indefinido cuando se ejecuta este código antes de que se ejecute el otro archivo (donde está declarado e iniciado). Es por eso que está rodeado de try y catch.

¿Cuál es la mejor manera de manejar este error indefinido que intentar capturar?

Respuesta

64

Puede comprobar el hecho con

if (typeof(jsVar) == 'undefined') { 
    ... 
} 
+0

¿Tiene esto alguna ventaja sobre "mi" camino? –

+0

Puede arrojar un error: jsVar no está definido. Debería probarlo de esta manera: if (window.jsVar! == undefined) {}. Parece que typeof() "capta" este error. –

+0

@Fabien: O tal vez use if ("jsVar" en la ventana) {} ... pero evitaría el código que requeriría codificación para este caso de error. –

0

en JavaScript, los siguientes valores hará que la condición if falle y no ejecuta su declaración: nulo, indefinido, falso, NaN, el número 0 y el vacío cuerda ''.

Suponiendo que la variable jsVar es un booleano y que queremos llamar al método de proceder() cuando jsVar es verdadero, podemos hacer la siguiente comprobación.

if (jsVar && jsVar == true) 
    proceed(); 

El fragmento de código anterior comprueba primero que jsVar se ha definido y luego verifica que su valor sea verdadero. La condición if se satisfará solo si se cumplen ambas condiciones.

Si jsVar no es un booleano, entonces podemos sustituir el control apropiado en el lugar de jsVar == verdadero en el código anterior.

+0

tenga en cuenta que esto no comprueba booleano 'true' ya que no está utilizando la comparación estricta (en JS, por ejemplo,' '1 '== verdadero' es verdadero!); esto también arrojará el error de referencia si la variable no se ha definido, es decir, tu código no resuelve el problema de Madhu – Christoph

+0

@Christoph ¡tienes razón! – Scott

8

Como suele ser el caso con JavaScript, hay varias maneras de hacer esto:

typeof foo !== 'undefined' 
window.foo !== undefined 
'foo' in window 

Los dos primeros deben ser equivalentes (siempre y cuando foo no está ensombrecido por una variable local), mientras que el el último devolverá true si la variable global está definida, pero no inicializada (o explícitamente establecida en undefined).

Cuestiones relacionadas