En un contexto booleano (un if, &&, ||, !), cada valor se trata como truthy o falsy. Hay exactamente 8 valores falsy — todo lo demás es truthy.
Los valores falsy: , , , (BigInt cero), (cadena vacía), , , .
En un contexto booleano (un if, &&, ||, !), cada valor se trata como truthy o falsy. Hay exactamente 8 valores falsy — todo lo demás es truthy.
Los valores falsy: , , , (BigInt cero), (cadena vacía), , , .
false0-00n""nullundefinedNaNif ("") {} // skipped — empty string is falsy
if (0) {} // skipped
if ("0") {} // RUNS — non-empty string is truthy!
if ([]) {} // RUNS — empty array is truthy!
if ({}) {} // RUNS — empty object is truthy!
Las sorpresas: "0", [] y {} son todos truthy, aunque "parezcan" vacíos.
const name = input || "guest"; // ❌ if input is "" or 0, falls back to "guest"
const count = input ?? 0; // ✅ ?? only falls back on null/undefined
|| recurre al valor por defecto ante cualquier valor falsy, así que un 0 o "" válido se reemplaza. El operador de coalescencia nula (nullish coalescing) ?? recurre al valor por defecto solo ante null/undefined, que suele ser lo que en realidad quieres.
Conocer el conjunto exacto de valores falsy evita errores sutiles — especialmente al proteger números (if (count > 0) y no if (count)) y al elegir ?? frente a || para los valores por defecto.