В boolean контексте (условия if, &&, ||, !) каждое значение обрабатывается как truthy или falsy. Существует ровно 8 falsy значений — всё остальное является truthy.
Falsy значения: , , , (BigInt ноль), (пустая строка), , , .
В boolean контексте (условия if, &&, ||, !) каждое значение обрабатывается как truthy или falsy. Существует ровно 8 falsy значений — всё остальное является truthy.
Falsy значения: , , , (BigInt ноль), (пустая строка), , , .
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!
Неожиданности: "0", [] и {} — все truthy, хотя выглядят "пустыми".
const name = input || "guest"; // ❌ if input is "" or 0, falls back to "guest"
const count = input ?? 0; // ✅ ?? only falls back on null/undefined
|| откатывается для любого falsy значения, поэтому допустимые 0 или "" заменяются. Оператор nullish coalescing ?? откатывается только для null/undefined, что обычно и требуется.
Знание точного набора falsy значений предотвращает тонкие ошибки — особенно проверку чисел (if (count > 0) вместо if (count)) и выбор ?? вместо || для значений по умолчанию.