2009-11-13 17 views
8

¿Cuál es la forma más fiable si quiero comprobar si la variable es nula o no está presente ?.¿Cuál es la forma más confiable de verificar si una variable de JavaScript es nula?

Hay diferentes ejemplos:

if (null == yourvar) 

if (typeof yourvar != 'undefined') 

if (undefined != yourvar) 
+2

use '===' y '! ==' – jantimon

+0

¿Qué quiere decir con "confiable"? – rjmunro

+0

** ver también: ** http://stackoverflow.com/questions/24318654 – dreftymac

Respuesta

13

ninguno de los anteriores.

No desea utilizar ==, o una variedad de eso, porque it performs type coercion. Si realmente desea comprobar si algo es explícitamente nulo, use el operador ===.

Por otra parte, su pregunta muestra quizás una cierta falta de claridad de sus requisitos. ¿De verdad quieres decir null específicamente? o también cuenta undefined? myVar === null sin duda le dirá si la variable es nula, que es la pregunta que hizo, pero ¿es esto realmente lo que quiere?

Tenga en cuenta que hay mucha más información en this SO question. No es un duplicado directo, pero cubre principios muy similares.

+0

Los tipos nulos y no definidos son == (pero no ===). – rahul

+0

https://developer.mozilla.org/es/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators – rahul

+0

Gracias por el enlace adamantium, agregado a mi respuesta. –

4

prefiero

if (null == yourvar) 

que evita la asignación accidental en este escenario

if (yourvar = null) 

Edición

Javascript tanto estricta y el tipo de conversión de la comparación de igualdad. Por la igualdad estricta los objetos que se comparan deben tener el mismo tipo y:

* Two strings are strictly equal when they have the same sequence of characters, 
    same length, and same characters in corresponding positions. 
* Two numbers are strictly equal when they are numerically equal (have the 
    same number value). NaN is not equal to anything, including NaN. 
    Positive and negative zeros are equal to one another. 
* Two Boolean operands are strictly equal if both are true or both are false. 
* Two objects are strictly equal if they refer to the same Object. 

tipos nulos y no definidas se == (pero no ===)

Leer Comparison Operators

+0

¿Alguna razón para el voto a la baja? – rahul

+0

@adamantium: por favor edite. Has añadido mucho desde mi voto negativo;) Originalmente te perdiste por completo el objetivo de la pregunta (evitando 'undefined'), que ahora has abordado. –

0

Si no le importa si es nulo, indefinido o falso o 0, y solo quiere ver si está básicamente "desarmado", no use ningún operador:

if (yourVar) 
+1

El único problema con eso, es que si 'yourVar' se establece en 0, o '0', o una cadena vacía, o posiblemente un montón de otras cosas, entonces todavía devolverá' false'. Así que esa es una muy mala manera de comprobar si se ha establecido en general; solo aplicable si ** sabes ** que todos los valores posibles no son * falsy *. –

+0

Sí. Pero dado que menciona la comparación tanto con la parte superior nula como sin definir, supongo que está haciendo algo _objecty_ y no tendrá que preocuparse por esos problemas. –

1

"undefined" no es "nulo".Comparar

  • la cuchara está vacía (= null)
  • No hay cuchara (= no definido)

algunos hechos que pueden ayudarle a más

  • typeof indefinido es "indefinido "
  • typeof null es" objeto "
  • undefined se considera igual (==) a nul l y viceversa
  • ningún otro valor es igual (==) para ya sea nulo o no definido
0

if (null == yourvar) y if (typeof yourvar != 'undefined') hacer cosas muy diferentes. Uno asume que la variable existe, la otra lo hace. Sugeriría no mezclar los dos en absoluto. Sepa cuándo esperar que la variable se ocupe de su presencia antes de lidiar con su valor.

Cuestiones relacionadas