【JavaScript】これって true? false? if文の条件判定(Truthy / Falsy)まとめ表
JavaScriptで開発をしていると、「あれ? 空の配列 [] って if文に入れると true だっけ? false だっけ?」と迷う瞬間がありませんか?
JavaScriptには、真偽値(boolean)以外の値を if文の条件式に入れた際、自動的に true っぽく扱うか(Truthy)、false っぽく扱うか(Falsy)というルールが存在します。
今回は、よく遭遇する値たちが if文の中でどのように判定されるのか、ひと目でわかるように表にまとめました。さらに、実際にクリックして判定を確認できるチェッカーも作成したので、ぜひ試してみてください!
Truthy / Falsy 早見表
まずは結論! JavaScriptの「Falsy」な値はこの8つだけ!
JavaScriptで false として扱われる値(Falsyな値)は決まっています。以下の8つ以外はすべて true(Truthyな値)になると覚えておくと非常にシンプルです。
| 値 | 型 | 判定 |
false | Boolean | false |
0 | Number | false |
-0 | Number | false |
0n | BigInt | false |
"" (空文字) | String | false |
null | Null | false |
undefined | Undefined | false |
NaN | Number | false |
間違いやすい「Truthy」な値の例
Falsyな値と似ていますが、以下はすべて true と判定されるので要注意です!
| 値 | 解説 | 判定 |
"0" | 文字列の0(空文字ではないため) | true |
"false" | 文字列のfalse(空文字ではないため) | true |
[] | 空の配列(オブジェクトの一種なため) | true |
{} | 空のオブジェクト | true |
function(){} | 関数 | true |
デモ動作
See the Pen JavaScript if文判定まとめ by mikanbako (@mikanbako) on CodePen.
demo: JavaScript if文判定まとめ
実装コードの紹介
【HTML】
<div class="l-wrap">
<p class="p-lead">下のボタンをクリックして、if文での判定結果を確かめてみよう!</p>
<div class="p-checker">
<div class="p-checker__buttons">
<!-- Falsyな値たち -->
<button class="c-btn js-check-btn" data-key="numZero">0</button>
<button class="c-btn js-check-btn" data-key="emptyString">"" (空文字)</button>
<button class="c-btn js-check-btn" data-key="nullVal">null</button>
<button class="c-btn js-check-btn" data-key="undefinedVal">undefined</button>
<!-- 間違えやすいTruthyな値たち -->
<button class="c-btn js-check-btn" data-key="strZero">"0" (文字列)</button>
<button class="c-btn js-check-btn" data-key="emptyArray">[] (空配列)</button>
<button class="c-btn js-check-btn" data-key="emptyObject">{} (空オブジェクト)</button>
</div>
<!-- 結果表示エリア -->
<div class="p-checker__result js-result-area">
<p class="js-result-text">ここに結果が出ます</p>
</div>
</div>
</div>
【CSS】
.l-wrap {
color: #3e3e3e;
padding: 40px;
text-align: center;
}
.p-lead {
font-weight: bold;
margin-bottom: 24px;
}
.p-checker {
max-width: 600px;
margin: 0 auto;
background: #fff;
padding: 32px;
border-radius: 12px;
box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}
.p-checker__buttons {
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: center;
margin-bottom: 32px;
}
.c-btn {
padding: 12px 20px;
font-size: 16px;
font-weight: bold;
background: #f0f0f0;
border: 2px solid #ddd;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s;
}
.c-btn:hover {
background: #e0e0e0;
transform: translateY(-2px);
}
/* ボタン選択状態用クラス */
.c-btn.is-active {
background: #f9d854;
}
.p-checker__result {
padding: 24px;
border-radius: 8px;
font-size: 24px;
font-weight: bold;
background: #f9f9f9;
border: 2px dashed #ccc;
transition: all 0.3s;
}
/* 判定結果用の動的クラス */
.p-checker__result.is-true {
background: #e0f7fa;
border-color: #1bb4d4;
color: #008394;
}
.p-checker__result.is-false {
background: #ffebee;
border-color: #c72c4c;
color: #b71c1c;
}
【JavaScript】
// 検証したい「本物のJavaScriptの値」をオブジェクトにまとめる
const testValues = {
numZero: 0,
emptyString: "",
nullVal: null,
undefinedVal: undefined,
strZero: "0",
emptyArray: [],
emptyObject: {}
};
// 要素の取得
const btns = document.querySelectorAll('.js-check-btn');
const resultArea = document.querySelector('.js-result-area');
const resultText = document.querySelector('.js-result-text');
// 各ボタンにクリックイベントを設定
btns.forEach(btn => {
btn.addEventListener('click', () => {
// HTMLのdata属性からキーを取得し、対応する実際の値を取り出す
const key = btn.dataset.key;
const valueToTest = testValues[key];
// クラスをリセット
resultArea.classList.remove('is-true', 'is-false');
btns.forEach(b => {
b.classList.remove('is-active');
});
// ボタンを選択状態にする
btn.classList.add('is-active');
// 実際にif文で判定
if (valueToTest) {
// Truthy(true)の場合
resultArea.classList.add('is-true');
resultText.textContent = `✨ 判定結果: true (Truthy) ✨`;
} else {
// Falsy(false)の場合
resultArea.classList.add('is-false');
resultText.textContent = `❌ 判定結果: false (Falsy) ❌`;
}
});
});
コードの解説・こだわったポイント
値の受け渡し方法(文字列化を防ぐ)
HTMLのボタンタグが持つ value 属性などで値を取得しようとすると、0 も [] もすべて「文字列」として取得されてしまい、正確な判定ができません。 そこで今回は、JavaScript側に testValues というオブジェクトを用意し、HTMLの data-key 属性と紐付けることで、「本物のJavaScriptの型と値」をそのまま if文に渡せるように工夫しています。
配列やオブジェクトは「中身が空」でも true
デモで [](空配列)や {}(空オブジェクト)を押してみてください。中身が空っぽでも、オブジェクトとして存在している時点で true と判定されます。 「配列の中身が空かどうか」を正しく判定したい場合は、if (array) ではなく、if (array.length > 0) のように length プロパティを使うのが鉄則です!
補足:公式ドキュメント(MDN)のリンク
より詳しい仕様については、以下の公式ドキュメント等をご参照ください。
まとめ
今回は、JavaScriptの if 文における条件判定(Truthy / Falsy)の基本についてまとめました。
特に 0 と "0" の違いや、中身が空っぽの配列 [] が true になる仕様は、思わぬバグを生み出しやすいポイントです。「Falsyになる8つの値」さえ覚えておけば、コードの意図を正確に読み解くことができます。
フレームワークやライブラリの便利な機能を使うことも大切ですが、こういったJavaScript自体の基礎的な言語仕様もしっかりと理解し、バグの少ない堅牢なコードを書けるエンジニアを目指していきたいと思います!