Command Palette

Search for a command to run...

null vs undefined en JavaScript: Diferencias y Cuándo Usar Cada Uno

Entiende la diferencia entre null y undefined, dos tipos primitivos que representan ausencia de valor. Aprende cuándo usar cada uno y cómo evitar bugs comunes.

Lectura: 9 min
Nivel: Principiante

TL;DR - Resumen rápido

  • undefined significa que una variable existe pero no tiene valor asignado. null significa ausencia intencional de valor
  • undefined es asignado automáticamente por JavaScript. null debe asignarse explícitamente por el programador
  • typeof undefined retorna 'undefined'. typeof null retorna 'object' (bug histórico de JavaScript)
  • Con comparación suelta (==), null == undefined es true. Con estricta (===), son diferentes
  • Variables sin inicializar, parámetros sin pasar, y propiedades inexistentes retornan undefined
  • Usa null para indicar explícitamente 'sin valor' o 'valor desconocido'. Usa undefined para valores no inicializados
  • Ambos son falsy - en condiciones booleanas se evalúan como false

¿Qué son null y undefined?

null y undefined son dos tipos primitivos de JavaScript que representan ausencia de valor, pero con significados sutilmente diferentes. undefined significa que una variable ha sido declarada pero no se le ha asignado un valor, o que se intentó acceder a algo que no existe. null es una asignación explícita que significa "sin valor" o "vacío intencionalmente".

La confusión entre null y undefined es común porque ambos representan "nada", pero la distinción es importante: undefined es lo que JavaScript asigna automáticamente cuando falta un valor, mientras que null es lo que tú asignas intencionalmente para indicar que algo está vacío. Esta diferencia semántica ayuda a distinguir entre valores que faltan por error (undefined) y valores que intencionalmente están vacíos (null).

Por Qué Dos Tipos para 'Nada'

Tener null y undefined separados permite distinguir entre "no inicializado" (undefined) y "intencionalmente vacío" (null). Por ejemplo, user.email siendo undefined podría significar que olvidaste inicializarlo, mientras que user.email siendo null indica explícitamente que el usuario no tiene email. Esta distinción es útil para debugging y lógica de negocio.

undefined: Ausencia No Intencional de Valor

undefined es un tipo primitivo con un único valor: undefined. JavaScript asigna automáticamente undefined en varias situaciones: variables declaradas sin inicializar, parámetros de función que no se pasaron, propiedades de objeto que no existen, y funciones que no retornan nada explícitamente. Es la forma que tiene JavaScript de decir "aquí debería haber un valor pero no lo hay".

undefined-casos.js
Loading code...

El ejemplo muestra los cuatro casos principales donde JavaScript asigna undefined automáticamente. Variables declaradas pero no inicializadas, parámetros de función omitidos, propiedades de objeto que no existen, y funciones sin return explícito. En todos estos casos, JavaScript usa undefined para indicar que falta un valor. No necesitas asignar undefined manualmente - JavaScript lo hace por ti.

undefined es una Variable Global

Técnicamente, undefined es una propiedad del objeto global con valor undefined. Esto significa que puedes hacer const x = undefined explícitamente, pero generalmente no deberías - deja que JavaScript asigne undefined automáticamente. Asignar undefined manualmente es confuso porque undefined debería significar "no inicializado", no "intencionalmente vacío" (para eso está null).

null: Ausencia Intencional de Valor

null es un tipo primitivo con un único valor: null. A diferencia de undefined que JavaScript asigna automáticamente, null debe ser asignado explícitamente por el programador. Representa la ausencia intencional de cualquier valor de objeto - es una forma de decir "este valor existe, pero intencionalmente está vacío" o "aún no tengo este valor pero lo tendré más tarde".

null-uso.js
Loading code...

null se usa cuando quieres indicar explícitamente que un valor está vacío o que aún no existe. Por ejemplo, si un usuario puede o no tener una foto de perfil, usarías null cuando no tiene foto (en lugar de undefined). Si una variable contendrá un objeto más tarde pero aún no lo tienes, inicialízala en null. Es una señal clara de intención: "sé que esto debería tener un valor, pero ahora está vacío".

typeof null Retorna 'object'

Un bug histórico de JavaScript es que typeof null retorna "object" en lugar de "null". Este bug existe desde el inicio de JavaScript y no se puede arreglar por retrocompatibilidad - arreglarlo rompería millones de sitios web. Para verificar si algo es null, usa comparación directa: value === null, no typeof value === "null".

Diferencias Clave entre null y undefined

Aunque null y undefined representan ausencia de valor, tienen diferencias importantes en significado, origen, tipo y uso. Entender estas diferencias te ayudará a escribir código más claro y evitar bugs sutiles donde usas uno cuando deberías usar el otro.

diferencias.js
Loading code...

Las diferencias principales son:

  • undefined es asignado automáticamente por JavaScript, null debe asignarse explícitamente
  • typeof undefined es 'undefined', typeof null es 'object'
  • undefined significa 'no inicializado', null significa 'intencionalmente vacío'
  • En operaciones matemáticas, undefined produce NaN, null se convierte a 0

Estas diferencias afectan cómo y cuándo debes usar cada uno en tu código.

Comparación y Igualdad

La comparación entre null y undefined tiene reglas específicas que pueden causar confusión. Con comparación suelta (==), null y undefined son considerados iguales entre sí pero diferentes de todo lo demás. Con comparación estricta (===), son diferentes porque son tipos diferentes.

comparacion.js
Loading code...

Este comportamiento especial de == con null y undefined es único - son los únicos valores que son == entre sí sin ser === iguales. null == undefined es true por diseño del lenguaje, para facilitar verificar si un valor es "nulo o no definido" sin importar cuál. Sin embargo, la mejor práctica es usar === para evitar confusión. Ambos son falsy, así que en condiciones booleanas se comportan igual.

Usa === para Claridad

Aunque null == undefined es true, siempre usa === para comparaciones. Es más explícito y previene bugs. Si quieres verificar si algo es null O undefined, hazlo explícitamente: value === null || value === undefined, o usa el operador nullish coalescing (??).

Verificar null y undefined de Forma Segura

Hay varias formas de verificar si un valor es null, undefined, o ambos. La forma más clara es la comparación directa con ===. También puedes usar operadores modernos como optional chaining (?.) y nullish coalescing (??) que manejan ambos casos elegantemente.

verificar.js
Loading code...

Las formas modernas de manejar null/undefined son más seguras y legibles. Optional chaining (?.) evita errores cuando accedes a propiedades anidadas que pueden no existir. Nullish coalescing (??) proporciona valores por defecto solo cuando el valor es null o undefined (a diferencia de || que también trata 0, "", y false como falsy). Estas son las formas preferidas en código moderno.

Optional Chaining y Nullish Coalescing

Estas características de ES2020 son la forma moderna de trabajar con null/undefined. user?.address?.city es mucho más seguro que user && user.address && user.address.city. value ?? 'default' es más preciso que value || 'default' porque solo activa con null/undefined, no con 0 o false.

Cuándo Usar null vs undefined

Aunque puedes usar null y undefined intercambiablemente en muchos casos, seguir convenciones claras hace tu código más legible y predecible. La regla general es: deja que JavaScript use undefined automáticamente para valores no inicializados, y usa null explícitamente cuando quieres indicar que algo está intencionalmente vacío.

cuando-usar.js
Loading code...

Usa null cuando: (1) Inicializas una variable que contendrá un objeto más tarde, (2) Quieres indicar explícitamente que un valor está vacío o desconocido, (3) Resetas una variable para liberar memoria, (4) Una propiedad opcional puede estar presente o ausente intencionalmente. Usa undefined cuando: (1) Dejas que JavaScript maneje valores no inicializados, (2) Retornas de funciones que no tienen valor de retorno, (3) Parámetros opcionales de función.

Errores Comunes con null y undefined

Los errores más comunes con null y undefined vienen de no verificarlos antes de acceder a propiedades, confundir == con ===, usar typeof para verificar null, y no entender que ambos son falsy pero no son intercambiables en todas las situaciones.

errores-comunes.js
Loading code...

El error más común es "Cannot read property of undefined/null" al intentar acceder a propiedades sin verificar primero. Usa optional chaining (?.) para evitarlo. Otro error es usar typeof para verificar null - no funciona porque typeof null es "object". También es común confundir el comportamiento de || vs ?? - || trata 0 y "" como falsy, ?? solo null/undefined.

Resumen: null vs undefined

Características principales:

  • undefined: ausencia no intencional, asignado automáticamente por JavaScript
  • null: ausencia intencional, debe asignarse explícitamente
  • typeof undefined es 'undefined', typeof null es 'object' (bug histórico)
  • null == undefined es true, pero null === undefined es false
  • Ambos son falsy en contextos booleanos

Mejores prácticas:

  • Usa null para valores intencionalmente vacíos o desconocidos
  • Deja undefined para valores no inicializados automáticamente
  • Usa === en lugar de == para comparaciones claras
  • Usa optional chaining (?.) para acceso seguro a propiedades
  • Usa nullish coalescing (??) para valores por defecto precisos