Javascript: valores null y undefined

undefined_is_null_or_not_defined_tshirt-p235102822879337939qr7c_400

Trabajar con JavaScript a pelo (o sea sin utilizar un framework) puede llegar a ser un dolor de cabeza, sobre todo por las validaciones necesarios que siempre tenemos que hacer. Para las validaciones hay dos palabras claves que debemos conocer siempre: null y undefined. Ambas nos sirven para lo mismo, para no utilizar las propiedades de dicho objeto, variable o función en caso que sean null o undefined, ahora bien, tienen sus diferencias.

Antes de ver las diferencias tenemos que tener en cuenta algunas cuestiones:

  1. Una función siempre tiene que retornar un valor.
  2. Si algo es undefined no tiene valor por tanto una función nunca puede retornar undefined (me refiero a funciones propias de JavaScript)
  3. La palabra reservada null en JavaScript es considerada un objeto (lo cual es lógico si tenemos en cuenta que no existe un tipo de datos que sea constante en JavaScript)

Veamos cuando comparar con null y cuando con undefined.

Si hacemos un alert a la expresión document.getElementById(‘elemento’), aunque elemento sea ‘undefined’ nos va a devolver null por tanto si hacemos typeof null esto nos devuelve object. No es lo mismo:

typeof document.getElementById(‘elemento’)

que

typeof document.elemento

En el primer caso siempre va a devolvernos un valor del tipo object porque es una función por tanto lo aconsejable es comparar que sea distinto de null, mientras en el segundo caso como estamos accediendo directamente al elemento si podremos comparar con undefined.

Recordad: la palabra reservada null en JavaScript es del tipo object.

Lo que me refería de las constantes anteriormente es que si tu defines una constante en JavaScript (posible desde JavaScript 2.0 con la palabra reservada const) y le pides el typeof de la misma te va a devolver el tipo como si fuera una variable normal (object, number, string, etc…) no existe una palabra específica para constantes.

Nota: el typeof nos sirve también para determinar si existe o no una función (si está definida) devolviéndonos la palabra ‘function’ en caso de que la función exista y sino nos devolverá ‘undefined’. Ej: typeof ValidarFormulario == ‘function’.

¿Más sencillo de ver ahora?

Comentarios