Yeda AI Tips · #115

English

Usa ?? para valores por defecto, no ||

Este bug de valores por defecto en JavaScript probablemente está en tu código ahora mismo. config.port || 3000 parece perfectamente razonable — y en silencio convierte un puerto 0 en 3000, un prefijo vacío en tu string de respaldo, y un false explícito en true. La solución son dos caracteres: ??.

El bug: || evalúa veracidad, no presencia

x || y devuelve y siempre que x sea falsy. JavaScript tiene seis valores falsy: false, 0, "" (cadena vacía), null, undefined y NaN. Cuatro de ellos son valores de configuración perfectamente válidos:

const port    = config.port    || 3000;   // 0      -> 3000  (bug)
const prefix  = config.prefix  || "app";  // ""     -> "app" (bug)
const retries = config.retries || 5;      // 0      -> 5     (bug)
const debug   = config.debug   || true;   // false  -> true  (¡bug!)

El usuario definió esos valores. || los descarta porque no distingue "ausente" de "falsy". port: 0 es una petición real — "dame un puerto libre aleatorio" en server.listen(0) de Node — y debug: false es la forma más común de apagar algo.

La solución: ?? evalúa nullish, no falsy

El operador nullish coalescing (??, ES2020) aplica el fallback solo cuando el lado izquierdo es null o undefined:

const port    = config.port    ?? 3000;   // 0      stays 0
const prefix  = config.prefix  ?? "app";  // ""     stays ""
const retries = config.retries ?? 5;      // 0      stays 0
const debug   = config.debug   ?? true;   // false  stays false

¿La clave no existe? config.port es undefined y obtienes 3000. ¿null explícito? Obtienes 3000. Cualquier otra cosa — incluidos todos los valores falsy que el usuario quiso poner — sobrevive.

Reglas prácticas

Valor de entradax || 3000x ?? 3000
undefined30003000
null30003000
030000
""fallback""
falsefallbackfalse
NaNfallbackNaN
808080808080

Conserva || solo cuando de verdad quieras tratar todos los valores falsy como ausentes — p. ej. normalizar texto del usuario donde "" debe volverse un placeholder. Para configuración, objetos de opciones y respuestas de API, usa ??.

Rincón para usuarios avanzados

Recursos

Read this article in English

¿Construyendo una funcionalidad con IA? Yeda AI diseña, audita y entrega sistemas LLM de producción.

Habla con nosotros · Lee el blog