2011-09-28 20 views

Respuesta

72
if (typeof variable !== 'undefined') { 
    // .. 
} 
else 
{ 
    // .. 
} 

encontrar una explicación más detallada aquí:

JavaScript isset() equivalent

+3

Utilice! == para una comparación estricta y un mejor rendimiento. –

+1

@ AmericanYak-en * typeof * prueba el algoritmo para resolver ['=='] (http://ecma-international.org/ecma-262/5.1/#sec-11.9.3) y ['=== '] (http://ecma-international.org/ecma-262/5.1/#sec-11.9.6) es idéntico ya que ambos valores tienen el mismo Tipo (cadena), entonces ¿de dónde proviene el mejor rendimiento? – RobG

+0

Esto falla porque '' typeof null' es 'Object' – nikjohn

0

se puede usar algo como esto

if (typeof varname != 'undefined') 
    { 
     //do this 
    }  
    else 
    { 
     //do this 

    } 
3

Sólo tiene que comprobar el tipo.

if(typeof yourVar !== "undefined"){ 
    alert("defined"); 
} 
else{ 
    alert("undefined"); 
} 
6

Utilice el operador in.

'myVar' in window; // for global variables only 

typeof cheques volverán cierto para una variable si,

  1. no se ha definido
  2. se ha definido y tiene el valor undefined, o
  3. se ha definido pero aún no se ha inicializado

Los siguientes ejemplos ilustrarán el segundo y el tercer punto.

// defined, but not initialized 
var myVar; 
typeof myVar; // undefined 

// defined, and initialized to undefined 
var myVar = undefined; 
typeof myVar; // undefined 
+0

Puede usar * en la ventana * solo en el caso especial de variables globales, ya que también se convierten en propiedades del objeto global. Las variables locales no tienen dicho objeto variable accssible. Suponer que hay un objeto de ventana puede ser razonable para los navegadores, pero no necesariamente es cierto en general. – RobG

+1

@RobG: no tiene que ser 'window' o el objeto global. Cualquier objeto puede usarse aquí en su lugar. Ha planteado un buen punto sobre las variables definidas localmente que no son accesibles aquí. Me interesaría saber si hay una manera de determinar la indefinición para las variables locales, basándome solo en el primer criterio que tengo. – Anurag

+0

Si habla de variables y alcance, solo puede distinguir entre variables globales (ya que son propiedades del objeto global) y el resto. En una función anidada, es imposible determinar si un identificador es una variable de función local o externa porque no puede acceder a los objetos variables relacionados. La resolución de propiedad del objeto es una cosa diferente. – RobG

Cuestiones relacionadas