Diferencias entre null y undefined en Javascript

¡Uy! Cuánto tiempo sin pasar por aquí…

Resulta que últimamente, en el trabajo, dedico mucho tiempo a Javascript. Es un lenguaje que cada vez me gusta más: flexible, simple y ortogonal. Es increíble a dónde se llega con 4 reglas bien aplicadas. Eso sí, se enseña MUY mal. Por ello, recomiendo encarecidamente leer la (re)introducción a Javascript por parte de Mozilla:

(…) Javascript probablemente sea el lengauje más incomprendido del mundo.

Volviendo al tema de este post, en Javascript hay dos “valores” especiales: null y undefined. ¿Pero qué significan exactamente y cuándo usar uno u otro? La mejor respuesta la he encontrado en StackOverflow. Traduzco la parte más divertida:

(nombre es undefined)

Programador: ¿qué es nombre?
Javascript: ¿nombre? ¿qué es un  nombre? No sé de qué hablas, ni siquiera has mencionado nombre antes. ¿No te referirás a otro lenguaje?

(nombre = null)

Programador: ¿qué es nombre?
Javascript: no lo sé

(…)

La clave para entender la diferencia radica en la noción de existencia. Si una variable es:

  • undefined: para Javascript, no existe. O bien no ha sido declarada o jamás se le asignó un valor.
  • null: para Javascript, la variable existe. En algún momento, explícitamente, la variable se estableció a null.

Las principales confusiones vienen de que, en Javascript, las expresión:

undefined == null

es verdadera por efecto del “type coercion” (otro día hablamos más de ello).

No obstante os recuerdo que el operador == no funciona en JS cómo están acostumbrados la mayoría de los programadores. El operador de comparación al uso en JS es === y la expresión:

undefined === null

es falsa como cabía esperar.

Así que, a la hora de usar uno u otro debemos ver si estamos preguntando por la existencia de una variable. Si es el caso, usaremos undefined. En caso de que preguntemos por si la variable contiene un valor seguro o no, como ocurriría en Java, C++ o C# usaremos null.

Anuncios

2 comentarios en “Diferencias entre null y undefined en Javascript

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s