Operadores de encadenamiento opcional y fusión nula en JavaScript

El operador de encadenamiento opcional (?.) permite aceder de forma segura a propiedades anidadas de un objeto sin provocar errores si alguna parte de la cadena es null o undefined.

Acceso seguro a propiedades anidadas

Sin este operador, para evitar errores al acceder a propiedades profundas, se requiere verificar manualmente cada nivel:

const data = {};
const edad = data.usuario && data.usuario.edad;

Con el encadenamiento opcional, esto se simplifica:

const data = {};
const edad = data.usuario?.edad;

Si data.usuario es null o undefined, la expresión devuelve undefined en lugar de lanzar un error. Internamente, equivale a:

const temp = data.usuario;
const edad = (temp == null) ? undefined : temp.edad;

Llamadas condicionales a métodos

También se puede usar para invocar métodos que podrían no existir:

const herramienta = {};
const resultado = herramienta.procesar?.();

Si procesar no está definido, resultado será undefined sin generar una excepción.

Manejo seguro de callbacks

function ejecutar(accion, manejarError) {
  try {
    // lógica principal
  } catch (error) {
    manejarError?.(error.message);
  }
}

Esto evita errores si manejarError no se proporciona.

Acceso condicional a elementos de array

const elemento = lista?.[2];

Si lista es null o undefined, elemento será undefined.

Evaluación cortocircuitada

La parte derecha del operador no se evalúa si la izquierda es null o undefined:

let ref = null;
let contador = 0;
let valor = ref?.[contador++];

console.log(contador); // 0, porque contador++ nunca se ejecutó

Operador de fusión nula (??)

Este operador devuelve el operando derecho únicamente si el izquierdo es null o undefined. A diferencia de ||, no considera valores falsos como 0, false o '' como "vacíos".

const a = null ?? 'predeterminado';     // 'predeterminado'
const b = 0 ?? 1;                       // 0
const c = '' ?? 'texto';                // ''

Combinación con encadenamiento opcional

Es común usar ambos operadores juntos para asignar valores por defecto:

const config = {};
const umbral = config.limite?.valor ?? 100;

Si config.limite o config.limite.valor no existen, umbral será 100.

Precedencia de operadores

El operador ?? no puede combinarse directamente con && o || sin paréntesis, ya que genera un error de sintaxis:

// ❌ Error de sintaxis
null || undefined ?? "valor";

// ✅ Correcto
(null || undefined) ?? "valor";

Etiquetas: JavaScript operadores nullish-coalescing optional-chaining

Publicado el 8-8 04:11