Cómo comprobar si una variable no es null?


Sé que a continuación se presentan las dos formas en JavaScript para verificar si una variable no es null, pero estoy confundido cuál es la mejor práctica para usar.

Debo hacer:

if (myVar) {...}

O

if (myVar !== null) {...}
Author: Xufox, 2010-12-06

6 answers

No son equivalentes. El primero ejecutará el bloque que sigue a la instrucción if si myVar es truthy (es decir, evalúa a true en un condicional), mientras que el segundo ejecutará el bloque si myVar es cualquier valor que no sea null.

Los únicos valores que no son veraces en JavaScript son los siguientes (también conocidos como valores falsy):

  • null
  • undefined
  • 0
  • "" (el vacío string)
  • false
  • NaN
 315
Author: Tim Down,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-23 00:25:05

Así es como puedes probar si una variable no es NULL:

if (myVar !== null) {...}

El bloque se ejecutará si myVar no es null.. se ejecutará si myVar es indefinido o falso o 0 o NaN o cualquier otra cosa..

 43
Author: Tolgahan Albayrak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-02 09:18:20

Tenga una lectura en este post: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Tiene algunos buenos consejos para JavaScript en general, pero una cosa que sí menciona es que debe verificar null como:

if(myvar) { }

También menciona lo que se considera 'falsey' que puede que no te des cuenta.

 40
Author: Jonathon Bolster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-05 22:22:24

Hay otro posible escenario que acabo de encontrar.

Hice una llamada ajax y obtuve datos como null, en un formato de cadena. Tuve que comprobarlo así:

if(value != 'null'){}

Entonces, null era una cadena que decía "null" en lugar de ser realmente null.

EDITAR: Debe entenderse que no estoy vendiendo esto como la forma en que debe hacerse. Tuve un escenario en el que esta era la única manera de hacerlo. No estoy seguro de por qué... tal vez el tipo que escribió el back-end estaba presentando los datos incorrectamente, pero de todos modos, esto es la vida real. Es frustrante ver esto abajo-votado por alguien que entiende que no es del todo correcto, y luego arriba-votado por alguien que realmente ayuda.

 6
Author: Flat Cat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-28 15:49:50

Si myVar es null entonces si el bloque no ejecuta de otro modo se ejecutará.

if (myVar != 'null') {...}

 2
Author: Sanjay Kumaar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 12:44:41

Las dos sentencias condicionales que listamos aquí no son mejores que las otras. Su uso depende de la situación. Por cierto, tiene un error tipográfico en el segundo ejemplo. Solo debe haber un signo igual después del signo de exclamación.

El 1er ejemplo determina si el valor en myVar es verdadero y ejecuta el código dentro de {...}

El segundo ejemplo evalúa si myVar no es igual a null y si ese caso es verdadero, ejecutará su código dentro de la {...}

Sugiero echar un vistazo a las declaraciones condicionales para obtener más técnicas. Una vez que esté familiarizado con ellos, puede decidir cuándo los necesita.

 -1
Author: THE DOCTOR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-05 22:27:37