こんにちは。JavaScriptという広大な海に飛び込んだばかりのあなたへ。
フロントエンドの現場でコードを書いていると、時々「え、今の判定なんで通っちゃうの?」という不思議な挙動に出くわすことがありますよね。特に `if` 文の条件式で、値が自動的に「はい(true)」か「いいえ(false)」に化けてしまう現象。
あれは魔法でもバグでもなく、JavaScriptが裏側で一生懸命やっている「ToBoolean(トゥー・ブーリアン)」という変換の儀式なんです。今日は、この「なぜその値は偽物(Falsy)とみなされるのか」を、一緒に紐解いていきましょう。
—
JavaScriptの「Falsy(偽物)」という名の7つの住人
JavaScriptの世界には、神様(仕様)が決めた「こいつらは偽物として扱うぞ!」という、たった7つの値が存在します。これらを専門用語でFalsy(フォーリィ)と呼びます。
逆に言えば、この7つ以外はすべて「真実(Truthy)」として扱われます。たとえ空っぽの配列 `[]` であろうと、マイナスの数値 `-100` であろうと、JavaScriptは「お、何かしら存在感があるな! じゃあ真実(true)だ!」と判断します。
まずは、その「偽物」のリストを眺めてみましょう。
偽物リスト(Falsy)
1. `undefined` (まだ何も定義されてない!)
2. `null` (意図的に空っぽにしました!)
3. `+0`, `-0` (ゼロは、プラスだろうがマイナスだろうが虚無!)
4. `NaN` (Not a Number:計算不能なエラー値!)
5. `””` (空っぽの文字列)
6. `0n` (BigInt型のゼロ!)
これらはすべて、条件式の中に放り込まれると「いいえ(false)」として扱われます。
—
なぜこんなルールがあるの?(例え話)
想像してみてください。あなたは今、スーパーのレジでお会計をしています。
- `undefined` や `null` は、カゴに何も入っていない状態。
- `0` は、お財布の中身が空っぽな状態。
- `””` は、中身が空のパッケージ。
レジの店員さん(JavaScriptのエンジン)は、効率を重視します。
「お客さん、カゴが空っぽなのに(`null` なのに)、会計処理を続けますか?」と聞くより、「中身がないなら、処理はスキップ(`false`)して次のお客さんにいこう」と判断したほうが、システムとしてずっと速いですよね。
この「効率のために、空虚なものはとりあえず『なし(false)』として扱っちゃおう!」という考え方が、JavaScriptの「暗黙の型変換」の正体なんです。
—
実践!コードで確かめてみよう
実際にエディタに貼り付けて、動きを見てみてください。本当に「偽物」として扱われているか確認できます。
// 値を「真偽値」に変換する関数
function checkValue(val) {
if (val) {
console.log(`「${val}」は、真実(Truthy)だ!`);
} else {
console.log(`「${val}」は、偽物(Falsy)だ…。`);
}
}
// 試しにいろいろ入れてみる
checkValue(undefined); // 偽物
checkValue(null); // 偽物
checkValue(0); // 偽物
checkValue(NaN); // 偽物
checkValue(“”); // 偽物
// 逆に、これはどうかな?
checkValue(“こんにちは”); // 真実!
checkValue(100); // 真実!
checkValue([]); // 真実!(ここが初学者の最大の罠!)
そう、一番の落とし穴は、空の配列 `[]` や空のオブジェクト `{}` は「真実(Truthy)」だということです。見た目は空っぽに見えるのに、JavaScriptは「空の箱という『実体』があるから、それは存在するもの(true)だ!」と考えるんです。ここだけは、ぜひ今のうちに覚えておいてくださいね。
—
つまずいたときは、深呼吸を
最初は「なんで `0` はfalseなのに、空の配列はtrueなの?」と混乱するかもしれません。でも、大丈夫です。ベテランのエンジニアでも、この変換ルールに何度も助けられ、そして時に裏切られて学んできました。
困ったときは、いつでも `Boolean(値)` と書いてみてください。その値が真実か偽物か、即座に教えてくれます。
console.log(Boolean(0)); // false
console.log(Boolean(“ああ”)); // true
JavaScriptのこの「大雑把だけど、なんだか人間味のあるルール」と仲良くなれば、あなたのコードはもっと柔軟で、軽やかになりますよ。
焦らず、少しずつ。今日学んだ「7つの偽物」を心の片隅に置いて、またコードの海を冒険してみましょう!応援しています。

コメント