W kontekście logicznym (warunek if, &&, ||, !) każda wartość jest traktowana jako truthy lub falsy. Istnieje dokładnie 8 wartości falsy — wszystko inne jest truthy.
Wartości falsy: , , , (BigInt zero), (pusty string), , , .
W kontekście logicznym (warunek if, &&, ||, !) każda wartość jest traktowana jako truthy lub falsy. Istnieje dokładnie 8 wartości falsy — wszystko inne jest truthy.
Wartości falsy: , , , (BigInt zero), (pusty string), , , .
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!
Niespodzianki: "0", [] i {} to wszystkie truthy, mimo że wyglądają na "puste".
const name = input || "guest"; // ❌ if input is "" or 0, falls back to "guest"
const count = input ?? 0; // ✅ ?? only falls back on null/undefined
|| wycofuje się dla każdej wartości falsy, więc prawidłowa wartość 0 lub "" zostaje zastąpiona. Operator nullish coalescing ?? wycofuje się tylko dla null/undefined, co zwykle jest tym, czego faktycznie chcesz.
Znajomość dokładnego zestawu wartości falsy zapobiega subtelnym błędom — zwłaszcza ochrona liczb (if (count > 0) zamiast if (count)) i wybór ?? w stosunku do || dla wartości domyślnych.