2010-02-20 18 views
6

Me gustaría saber si existe una variable Javascript. Esto es lo que tengo hasta ahora, que fue armado de diferentes foros:Averiguar si existe una variable

function valueOfVar(foo){ 

    var has_foo = typeof foo != 'undefined'; 

    if(has_foo){ 
     alert('1 = true'); 
     return true; 
    } 
    else { 
     alert('1 = false'); 
     return false; 
    } 

} 

Tenga en cuenta, deseo pasar una serie de como foo. Ejemplo: valueOfVar (box_split [0] + '_ 2')

Ahora, no creo que esto funcione porque devuelve verdadero cuando ciertas variables ni siquiera existen. De hecho, parece volverse cierto todo el tiempo.

Una implementación de JQuery que funciona también sería genial ya que hago uso de esto.

Gracias a todos por cualquier ayuda

Respuesta

6

¿Te refieres a algo como esto?

function variableDefined (name) { 
    return typeof this[name] !== 'undefined'; 
} 

console.log(variableDefined('fred')); 
// Logs "false" 

var fred = 10; 
console.log(variableDefined('fred')); 
// Logs "true" 

Si usted quiere ser capaz de manejar las variables locales que tendrá que hacer algo bastante raro como esto:

function variableDefined2 (value) { 
    return typeof value !== 'undefined'; 
} 

function test() { 
    var name = 'alice' 
    console.log(variableDefined2(eval(name))); 
    var alice = 11; 
    console.log(variableDefined2(eval(name))); 
} 

test(); 
// Logs false, true 
+0

¡Sigue siendo cierto en todos los casos! – Abs

+0

No lo hago cuando lo pruebo en la consola de Javascript de Chrome. ¿Cómo lo estás probando? – Rich

+0

Sí, funcionó! ¡Fantástico! El error fue que no cambié el nombre a foo ... La variable que estaba usando. Gracias Rich. :) – Abs

1

El problema con su prueba valueOfVar(box_split[0]+'_2') es que está anexando una cadena para el atributo definido. Siempre pasará una cadena al valueOfVar() con el valor 'undefined_2'.

Usted notará que el operador typeof volverá 'string' si se intenta lo siguiente:

function valueOfVar(foo){ 
    alert(typeof foo); 
} 

valueOfVar(box_split[0]+'_2'); 

El operador typeof funcionaría para este tipo de pruebas, pero no se puede añadir nada a la variable no definida , de lo contrario probaría siempre verdadero:

if (typeof foo === 'undefined') { 
    // foo does not exist 
} 
else { 
    // it does 
} 
+0

box_split [0] está definido. ¿Por qué crees que no está definido? Tiene un valor de "chk". – Abs

0

No estoy seguro si este se dirige a su problema, pero en JavaScript, es nula no es lo mismo que indefinido. El código que escribió es correcto para probar si una variable no está definida. IE:

<script> 
window.onload = function() 
{ 
    alert(typeof(abcd) == "undefined"); //true 
    abcd = null; 
    alert(typeof(abcd) == "undefined"); //false 
}; 
</script> 

Por cierto, el tipo de nulo es "objeto".

Cuestiones relacionadas