¡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.
Salvador:
Creo que este artículo te divertirá. La entrada de JavaScript es bastante acertada.
http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html
Reblogueó esto en bienperroblogy comentado:
Diferencias entre null y undefined
typeof null // object (bug en ECMAScript, debería ser null)
typeof undefined // undefined
null === undefined // false
null == undefined // true
Como dice https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/null
La fuente del post es un altamente recomendable blog.