null y undefined
En JavaScript hay dos formas de decir “no hay valor”: undefined y null. A primera vista parecen lo mismo, pero representan ideas distintas. Entender la diferencia te evitará confusiones cuando empieces a trabajar con datos.
Objetivos
Sección titulada «Objetivos»Al terminar esta lección deberías ser capaz de:
- Explicar con un ejemplo sencillo qué significa
undefinedy qué significanull. - Reconocer cuándo JavaScript pone
undefinedpor su cuenta. - Decidir cuándo conviene usar
null. - Comparar ambos valores correctamente.
- Saber qué comprueba
typeofen cada caso.
La idea central
Sección titulada «La idea central»Imagina una estantería con cajas etiquetadas:
undefined: la caja existe, pero todavía nadie ha metido nada. JavaScript la creó y la dejó pendiente. Es un “aún no”.null: la caja existe y tú has decidido dejarla vacía. Es un “aquí no hay nada, y lo hago a propósito”.
Dicho de otra forma: undefined suele ponerlo el lenguaje; null lo pone quien programa.
console.log(undefined); // undefined → todavía no hay valorconsole.log(null); // null → el vacío está puesto a propósito¿Cuándo aparece undefined?
Sección titulada «¿Cuándo aparece undefined?»JavaScript lo genera cuando falta un valor y nadie lo dio. Lo encontrarás en situaciones como estas:
- Cuando declares algo sin darle contenido todavía (lo practicarás en Guardando valores).
- Cuando pidas un dato que todavía no existe.
- Cuando una operación no produce ningún resultado que entregar.
Todas comparten la misma idea: faltó un valor. Por ahora quédate con la frase: undefined = “aún no”.
¿Cuándo conviene usar null?
Sección titulada «¿Cuándo conviene usar null?»null es una decisión explícita. Se usa para indicar: “sé que este dato existe, pero ahora mismo está vacío”.
Casos típicos:
- Un campo que el usuario todavía no rellenó, pero que sabemos que existe.
- El resultado de una búsqueda que no encontró nada.
- Un dato que antes tenía contenido y que quieres dejar vacío.
La diferencia con undefined es la intención: con null estás diciendo “esto está vacío porque yo lo decidí”.
console.log(null === null); // true → es el mismo valor "vacío"console.log(null === undefined); // false → no son lo mismoComparación de ambos
Sección titulada «Comparación de ambos»| Aspecto | undefined |
null |
|---|---|---|
| Quién lo pone | Normalmente JavaScript | Quien programa |
| Significado | “Aún no hay valor” | “Hay un vacío a propósito” |
typeof |
"undefined" |
"object" ⚠️ |
| Es un tipo primitivo | Sí | Sí |
| Valor de algo sin contenido | Sí | No |
| Comparación estricta entre ellos | undefined === null → false |
null === undefined → false |
console.log(typeof undefined); // "undefined"console.log(typeof null); // "object" → error histórico del lenguaje
console.log(null === undefined); // false → tipos distintosconsole.log(null == undefined); // true → excepción de la igualdad débilErrores frecuentes
Sección titulada «Errores frecuentes»- Asignar
undefineda mano. No suele hacer falta: usanullpara expresar un vacío intencional. - Creer que
nulles de tipo"object"porquetypeoflo dice. No lo es; es un primitivo. - Usar
==para compararlos y confiar en que son iguales. Con===son distintos. - Creer que ambos significan lo mismo.
undefinedes “aún no”;nulles “vacío decidido”. - Fiarse de
typeofconnull. Devuelve"object"; mejor comparar directamente.
Ejercicio
Sección titulada «Ejercicio»- Ejecuta
console.log(undefined)yconsole.log(null)y observa cómo los muestra la consola. - Ejecuta
typeof undefinedytypeof null. Anota por qué el segundo resultado sorprende. - Predice y comprueba:
null === undefined,null == undefined,null === null. - Escribe con tus palabras una frase que distinga “aún no hay valor” de “hay un vacío a propósito”.
Resumen
Sección titulada «Resumen»undefined= “todavía no hay valor”; lo pone JavaScript cuando falta una asignación.null= “vacío a propósito”; lo escribes tú para indicar que el dato existe pero está sin contenido.typeof undefinedes"undefined";typeof nulles"object"por un error histórico.- Con
===son distintos; con==JavaScript los considera iguales (mejor evitarlo). - Para comprobarlos de forma fiable, compara directamente con
=== nullo=== undefined.
Siguiente paso: Guardando valores (Variables).