In a boolean context every value is either truthy or falsy — and there are only eight falsy values to memorise.
The complete falsy list
false · 0 · -0 · 0n · "" (empty string) · null · undefined · NaN
Everything else is truthy — including "0", "false", " ", [], {}, function(){}, Infinity and new Boolean(false).
import { inspect } from "node:util";
const values = [0, -0, "", null, undefined, NaN, 0n, "0", "false", " ", [], {}, -1];
for (const v of values) {
console.log(inspect(v).padEnd(9), "→", Boolean(v));
}0 → false
-0 → false
'' → false
null → false
undefined → false
NaN → false
0n → false
'0' → true
'false' → true
' ' → true
[] → true
{} → true
-1 → trueUsing truthiness
const items = [];
if (items.length) console.log("has items");
else console.log("empty array (length 0 is falsy)");
const name = "";
console.log(name || "Anonymous");
console.log(!!"text", !!0);empty array (length 0 is falsy)
Anonymous
true false|| vs ?? for defaults
const settings = { volume: 0, title: "" };
console.log(settings.volume || 50, settings.volume ?? 50);
console.log(settings.title || "Untitled", settings.title ?? "Untitled");
console.log(settings.missing ?? "default");50 0
Untitled
defaultList the falsy values in JavaScript.