Loginiam kontekste (į if, &&, ||, !), kiekviena reikšmė yra traktuojama kaip truthy arba falsy. Yra tiksliai 8 falsy reikšmės — viskas kita yra truthy.
falsy reikšmės: false, 0, -0, 0n (BigInt zero), "" (empty string), null, undefined, NaN.
js
if ("") {} // 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!
Surprizai: "0", [] ir {} visos yra truthy, nors ir atrodo "tuščios."
Dažna, reali klaida
js
const name = input || "guest"; // ❌ if input is "" or 0, falls back to "guest"
const count = input ?? 0; // ✅ ?? only falls back on null/undefined
|| grįžta bet kuriai falsy reikšmei, todėl validus 0 arba "" pakeičiamas. Nullish coalescing operatorius ?? grįžta tik null/undefined, o tai paprastai yra tą, ką jūs iš tikrųjų norite.
Kodėl tai svarbu
Žinant tikslų falsy rinkinį, išvengiama subtilių klaidų — ypač skaičių apsauga (if (count > 0) o ne if (count)) ir ?? vs || pasirinkimas numatytoms reikšmėms.
