¿Cuál es la diferencia entre NULL y undefined?

Null vs. Undefined: El Duelo del Vacío en JS

05/10/2025

Valoración: 4.69 (3948 votos)

En el universo de la programación, y especialmente en un lenguaje tan flexible como JavaScript, a menudo nos encontramos con la necesidad de representar la ausencia de un valor. Es como tener una ranura de inventario vacía en un RPG; sabemos que el espacio está ahí, pero no contiene ningún objeto. JavaScript nos ofrece dos contendientes principales para esta tarea: null y undefined. A primera vista, podrían parecer gemelos, pero en realidad son dos conceptos distintos con propósitos muy diferentes. Entender su diferencia no es solo un detalle técnico, es fundamental para escribir código limpio, predecible y libre de errores inesperados que pueden convertirse en verdaderos monstruos a depurar.

¿Qué es el valor primitivo undefined?
El valor primitivo undefined. undefined es una propiedad del objeto global, es decir, una variable de alcance global. En navegadores modernos (JavaScript 1.8.5 / Firefox 4+), undefined es una propiedad no-configurable, no-grabable según la especificación ECMAScript 5. Aún cuando este no sea el caso, evite sobreescribirlo.

Este artículo se sumergirá en las profundidades de estos dos valores primitivos. Desglosaremos qué son, cómo se originan, en qué se diferencian y, lo más importante, cuándo y cómo deberías utilizarlos en tus proyectos. Prepárate para aclarar una de las dudas más comunes entre los desarrolladores de JavaScript, desde los novatos hasta los más experimentados.

Índice de Contenido

Undefined: El Vacío por Ausencia

Imagina que declaras una caja para guardar algo, pero todavía no has metido nada dentro. En el mundo de JavaScript, esa caja no está realmente vacía, sino que contiene un marcador de posición llamado undefined. Este es el estado por defecto de cualquier variable que ha sido declarada pero a la que todavía no se le ha asignado un valor.

undefined es un valor primitivo que JavaScript asigna automáticamente en varias situaciones:

  • Variables no inicializadas: Como mencionamos, es el caso más común.
  • let personaje; console.log(personaje); // Muestra: undefined
  • Funciones sin retorno explícito: Si una función completa su ejecución sin encontrar una sentencia return que devuelva un valor, automáticamente devolverá undefined.
  • function saludar() { console.log("¡Hola, mundo!"); // No hay sentencia return } let resultado = saludar(); // La función imprime "¡Hola, mundo!" console.log(resultado); // Muestra: undefined
  • Parámetros de función no proporcionados: Si llamas a una función que espera argumentos, pero no los pasas todos, los parámetros que no recibieron un valor serán undefined.
  • function mostrarPoder(personaje, poder) { console.log(`${personaje} tiene el poder de ${poder}`); } mostrarPoder("Mago Eléctrico"); // Muestra: "Mago Eléctrico tiene el poder de undefined"
  • Propiedades de objeto inexistentes: Al intentar acceder a una propiedad que no existe en un objeto, el resultado es undefined.
  • const jugador = { nombre: "Alex", nivel: 99 }; console.log(jugador.clan); // Muestra: undefined

    Es crucial entender que undefined no es un error, sino una señal del sistema que nos dice: "Aquí se espera un valor, pero no se ha asignado ninguno". Históricamente, undefined era una propiedad del objeto global que podía ser modificada, una decisión de diseño peligrosa. Afortunadamente, en las versiones modernas de JavaScript (ECMAScript 5 y posteriores), undefined es una propiedad no-configurable y no-escribible, lo que lo hace una constante segura. Sin embargo, la recomendación sigue siendo firme: nunca intentes asignar un valor a undefined ni usarlo como nombre de variable.

    Null: El Vacío Intencional

    Si undefined es la ausencia de valor por omisión, null es la ausencia de valor por elección. Es un valor que nosotros, los desarrolladores, asignamos explícitamente a una variable para indicar que, de forma intencionada, no tiene ningún valor de objeto. Es nuestra forma de decir: "Sé que esta variable existe, y he decidido conscientemente que su valor es 'ninguno'".

    null representa una ausencia deliberada. Por ejemplo, podrías usar null para inicializar una variable que más tarde contendrá un objeto, o para "limpiar" el valor de un objeto cuando ya no es necesario, permitiendo que el recolector de basura de JavaScript libere la memoria.

    let objetoSeleccionado = null; // ...más tarde en el código, el usuario selecciona un objeto objetoSeleccionado = { id: 1, nombre: "Espada Maestra" }; // ...el usuario deselecciona el objeto objetoSeleccionado = null; // Limpiamos la referencia intencionadamente

    La Curiosidad del `typeof null`

    Aquí es donde las cosas se ponen interesantes y un poco extrañas. Si intentas verificar el tipo de undefined, obtendrás, como es de esperar, "undefined". Pero si haces lo mismo con null, el resultado es sorprendente.

    typeof undefined; // Retorna "undefined" typeof null; // Retorna "object"

    ¿Por qué `typeof null` devuelve "object"? Esto es, de hecho, un error histórico en la primera versión de JavaScript que nunca se ha corregido. La razón es la retrocompatibilidad; cambiar este comportamiento ahora rompería una cantidad inmensa de código existente en la web que depende de esta peculiaridad. Así que, aunque null es un valor primitivo (al igual que `string`, `number`, `boolean`, `undefined`, `symbol` y `bigint`), el operador `typeof` nos miente y nos dice que es un objeto. Es algo con lo que debemos vivir y recordar.

    Tabla Comparativa: Null vs. Undefined

    Para visualizar mejor las diferencias clave, aquí tienes una tabla comparativa directa:

    Característicanullundefined
    SignificadoUn valor asignado intencionalmente que significa "sin valor" o "vacío".Una variable que ha sido declarada pero aún no se le ha asignado un valor.
    OrigenAsignado por el programador.Asignado automáticamente por el motor de JavaScript.
    Tipo (`typeof`)"object" (el error histórico)."undefined".
    NaturalezaValor primitivo. Es una palabra clave reservada.Valor primitivo. Es una propiedad del objeto global.
    Conversión a NúmeroSe convierte a 0.Se convierte a NaN (Not a Number).

    La Comparación: Igualdad Abstracta (==) vs. Igualdad Estricta (===)

    El comportamiento de null y undefined al ser comparados es otra fuente común de confusión. Aquí es donde los operadores de igualdad entran en juego.

    ¿Cuál es la diferencia entre NULL y undefined?
    En sentido estricto, null representa un valor definidos intencionalmente como “en blanco”, y undefined representa la falta de un valor asignado. null y undefined son parcialmente iguales, pero no estrictamente iguales. El operador de igualdad baja coerciona operandos de diferentes tipos a booleanos valores, por lo que null y undefined son false.
    • El operador de igualdad abstracta (`==`) compara dos valores después de convertirlos a un tipo común (proceso llamado coerción de tipo).
    • El operador de igualdad estricta (`===`) compara dos valores sin realizar ninguna conversión de tipo. Si los tipos son diferentes, devuelve false inmediatamente.

    Cuando comparamos null y undefined, vemos un resultado muy revelador:

    console.log(null == undefined); // Muestra: true console.log(null === undefined); // Muestra: false

    El operador == considera que null y undefined son iguales porque ambos representan un concepto de "vacío" o "nada". Sin embargo, el operador === los considera diferentes porque, como hemos visto, son de tipos distintos (o al menos, JavaScript los trata como tales: `null` es del tipo `null` y `undefined` es del tipo `undefined`, a pesar de la rareza de `typeof`).

    Regla de oro: Utiliza siempre la igualdad estricta (`===`) para evitar la coerción de tipo y los comportamientos inesperados que esta puede causar. Si necesitas comprobar si una variable es específicamente null o undefined, compárala directamente usando `===`.

    Preguntas Frecuentes (FAQ)

    ¿Cuándo debo usar `null` en mi código?

    La convención general es usar null cuando quieres indicar explícitamente que una variable, que normalmente contendría un objeto, está vacía. Es una forma de comunicar una ausencia intencional. Por ejemplo, en el resultado de una búsqueda en la base de datos que no encuentra ningún registro, devolver null es más semántico que devolver undefined.

    ¿Son `null` y `undefined` valores "falsy"?

    Sí, ambos lo son. En un contexto booleano (como una sentencia if), tanto null como undefined se evalúan como false. Los otros valores "falsy" en JavaScript son false, el número 0, NaN, y una cadena de texto vacía ("").

    if (!null) { console.log("null es falsy"); } if (!undefined) { console.log("undefined es falsy"); }

    Entonces, ¿debería asignar `undefined` a una variable alguna vez?

    Generalmente, no. Deberías dejar que JavaScript use undefined para señalar que algo no ha sido inicializado. Si necesitas "resetear" o "vaciar" una variable, la opción más clara y semántica es asignarle null. Asignar undefined manualmente puede hacer que tu código sea más difícil de entender y depurar, ya que difumina la línea entre un valor que nunca fue asignado y uno que fue vaciado intencionadamente.

    Conclusión: Dominando el Vacío

    Aunque null y undefined puedan parecer similares, representan ideas fundamentalmente diferentes en JavaScript. Undefined es la ausencia de valor por defecto, el estado natural de las cosas que aún no han sido definidas. Null, por otro lado, es una declaración de intenciones, una asignación explícita de "nada".

    Comprender esta distinción te permitirá escribir un código más robusto y expresivo. Recuerda usar null para indicar una ausencia deliberada de un valor de objeto y deja que undefined haga su trabajo de señalar variables y propiedades no inicializadas. Y, sobre todo, prefiere siempre la comparación estricta (`===`) para evitar las trampas de la coerción de tipos. Al dominar estos conceptos, estarás un paso más cerca de dominar JavaScript y de construir aplicaciones más sólidas y predecibles.

Si quieres conocer otros artículos parecidos a Null vs. Undefined: El Duelo del Vacío en JS puedes visitar la categoría Juegos.

Subir