2012-08-08 18 views
9

Estoy tratando de crear una función reutilizable que compruebe si una variable no está definida o no. Lo extraño es que no funciona cuando paso la variable a la función para ejecutar el código, pero si uso la misma lógica fuera de la función, funciona. ¿Hay alguna forma de que esta función esté definida para funcionar?¿Error al pasar variable indefinida a la función?

//THIS WORKS AND RETURN FALSE 
alert(typeof sdfsdfsdfsdf !== 'undefined'); 

//THIS GIVES AN ERROR, WHY? 
//Uncaught ReferenceError: sdfsd is not defined 
function isDefined(value) { 
     alert(typeof value !== 'undefined' && value !== null) 
} 

isDefined(sdfsd); 

ejemplo vivo aquí (comprobar la consola de errores): http://jsfiddle.net/JzJHc/

+0

No puede hacer esto. ¿Cómo puede ingresarlo en su función para probarlo si no existe? También esto: 'typeof value! == 'undefined' && value! == null' es terriblemente innecesario. Si quieres una prueba 'null' o' undefined', simplemente haz 'value == null'. Logra lo mismo. –

Respuesta

10

No puede utilizar una variable que no ha sido declarado a menos que sea en una prueba

typeof Cuando se intenta pasar una variable que no se ha declarado en una función, que se considera usar esa variable no declarada. Se dará cuenta de que el error está en la persona que llama, no en el interior isDefined

Tiene que ejecutar la comprobación de

if (typeof sdsdsd !== 'undefined') 

antes de pasarlo a la función. Básicamente eso significa que no puede escribir una función isDefined que acepte variables no declaradas. Su función solo puede funcionar para propiedades indefinidas (que pueden pasar)

Sin embargo, tengo curiosidad, ¿cuál es el caso del mundo real en el que está pasando una variable que no existe? Deberías declarar todas tus variables y deberían existir ya. Si hubiera declarado var sdsdsds, existiría con el valor de undefined y su función isDefined funcionaría perfectamente.

+0

+1 * especialmente * para el último párrafo. –

+0

De hecho, su último párrafo me hizo pensar en volver a diseñar las cosas de manera más elegante. Mi escenario es que una variable se está procesando a través de una vista MVC. Pero la vista tiene una condición para no presentarla si no hay resultados para la solicitud. Entonces mi inicialización de Javascript (desde otra vista), verifica si ese objeto existe o no para realizar una acción. Así que tienes razón, debería declarar la variable fuera de la condición MVC. ¡Gracias por el consejo! – TruMan1

+0

Otro caso en el que puede usar una variable que no está declarada es * delete *. – zsong

Cuestiones relacionadas