ブールコンテキスト(if、&&、||、!)では、すべての値が truthy か falsy のいずれかとして扱われます。falsy な値はちょうど8個 あり、それ以外はすべて truthy です。
falsy な値は次のとおりです。、、、(BigInt のゼロ)、(空文字列)、、、。
ブールコンテキスト(if、&&、||、!)では、すべての値が truthy か falsy のいずれかとして扱われます。falsy な値はちょうど8個 あり、それ以外はすべて 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 合体(nullish coalescing) 演算子 ?? は null/undefined の場合のみフォールバックし、これが通常あなたが本当に望むものです。
正確な falsy の集合を知っておくことで、微妙なバグを防げます — とくに数値をガードするとき(if (count) ではなく if (count > 0))や、デフォルト値に ?? と || のどちらを選ぶかという場面で役立ちます。