2010-05-18 15 views
6

¿Es posible buscar null e indefinido en javascript?¿Cómo comprobar tanto nulo como indefinido en js?

if(_var == null || _var == undefined) { 

} 
+1

Cambiaría ambas expresiones, pero debería funcionar. –

+1

Si '_var' es' undefined', la expresión '_var == undefined' nunca será alcanzada, porque' _var == null' no escribe coerción, [como Pim anota más abajo] (http://stackoverflow.com/questions/2860058/how-to-check-for-both-null-and-undefined-in-js/2860063 # 2860063) y 'undefined == null' devuelve' true'. El '_var == null' también estará probando' undefined', sin embargo, creo que confiar en la coerción de tipo generalmente no es recomendable. –

Respuesta

4

Sin embargo, utilizando el operador == no es NECESARIO. usar foo == null también será cierto para foo no está definido. Sin embargo, tenga en cuenta que indefinido y nulo o no (!) Lo mismo. Es porque == escribe coersion que foo == null también es verdadero para foo no está definido.

+0

+1, esta es la forma más rápida de lograrlo, y está completamente descrito en la especificación: [El algoritmo de comparación de igualdad abstracta] (http://bclary.com/2004/11/07/#a-11.9.3) (no se preocupe por la coerción de tipo) ... 'if (_var == null) {...}' – CMS

0

también puede utilizar $defined función en mootools (y debe haber un equivalente en jQuery)

7

En JavaScript (pre ECMAScript 5), undefined no es una constante, sino una variable global, y por lo tanto es posible cambiar su valor Por lo tanto, sería más fiable utilizar el operador typeof para comprobar si hay undefined:

if (typeof _var === 'undefined') { } 

Además, su expresión se obtendrá una ReferenceError si la variable _var no se ha declarado. Sin embargo, aún podría probarlo con el operador typeof como se muestra arriba.

Por lo tanto, es posible que prefiera utilizar el siguiente:

if (typeof _var === 'undefined' || _var === null) { } 
+1

Su primer caso es un poco arriesgado ya que _var podría establecerse en algún otro valor falso que nulo. –

+0

@snowlord: cierto. Eliminé esa parte. –

+1

Afortunadamente ahora en ECMAScript 5, 'undefined' es una propiedad del objeto global que no es modificable, no configurable (no eliminable) y no enumerable :) – CMS

1
if (!_var) { 
    // Code here. 
} 

Esto debería funcionar, ya que ambos están undefined y null tipo coaccionado a false.

Por supuesto que es el pequeño problema si _var es en realidad false pero funciona ya que en la mayoría de los casos que se quieren saber si _var no es true y no un objeto.

+4

Tenga en cuenta que hay otros tres valores falsy en JavaScript, aparte de 'false',' null' y 'undefined': una cadena vacía' "" ',' 0' y 'NaN'. –

Cuestiones relacionadas