Contents
JavaScript 条件文 Truthy Falsy 使い分け:初心者向けの実務ガイド
JavaScriptを学ぶ中で「なぜ条件文が思った通り動かないのか」と悩むことは多いです。特にtruthy(真値)とfalsy(偽値)という概念は、初学者にとってやや抽象的ですが、実際のコードでは頻繁に登場します。
本記事では、truthy/falsyの定義から、条件文での挙動、実務で役立つ使い分け方までをわかりやすく解説。コードサンプルを使って理解を深め、間違いやすいポイントも避けてください。
真理値の基本概念:truthyとfalsyとは?
JavaScriptでは、条件文(if/elseなど)で使われるtrueやfalse以外にも、評価結果が「真」または「偽」とみなされる値があります。これをtruthy(真値)・falsy(偽値)と呼びます。
JavaScriptにおける真偽判定の仕組み
JavaScriptは条件文で使用する値を自動的にBoolean()に変換します。このとき、以下のような値がfalsyとして扱われます:
false0""(空文字)nullundefinedNaN
一方、それ以外のすべての値はtruthyとみなされます。例えば、"0"や[](空配列)、{}(空オブジェクト)もtruthyです。
true/false以外の評価結果を表にまとめた例
|
1 2 3 4 5 6 7 8 9 10 11 12 |
| 値 | 評価結果(Boolean()) | 意味 | |------------|----------------------|-------------| | `true` | ✅ true | 明示的な真値 | | `false` | ❌ false | 明示的な偽値 | | `0` | ❌ false | 0はfalsy | | `"0"` | ✅ true | 空文字ではない | | `""` | ❌ false | 空文字はfalsy | | `null` | ❌ false | nullはfalsy | | `undefined`| ❌ false | undefinedもfalsy | | `[1,2]` | ✅ true | 配列はtruthy | | `{}` | ✅ true | オブジェクトもtruthy | |
注意:空配列や空オブジェクトはtruthyとなるため、存在チェックと値チェックを混同すると想定外の動作になります。具体的には:
- 存在チェック(value !== null && value !== undefined)が必要な場合
- 値チェック(valueがtruthyかfalsyか)が必要な場合
条件文での挙動:if/elseの評価ルール
JavaScriptでは、if (値)のように書かれた条件式がtruthy/falsyで実行されるかどうかを判断します。この仕組みは、すべての条件文に共通しています。
if文の実行フロー例
以下のようなコードを考えます:
|
1 2 3 4 5 6 7 8 |
let value = 0; if (value) { console.log("値がtrueと評価されました"); } else { console.log("値がfalseと評価されました"); } |
この場合、valueは0でありfalsyなので、elseブロックが実行され、「値がfalseと評価されました」と表示されます。
論理演算子との組み合わせ
論理演算子(&&, ||)を使うと、truthy/falsyの挙動がさらに複雑になります。
例1: &&(AND)演算子
|
1 2 3 4 5 6 7 8 9 |
let a = "hello"; let b = 0; if (a && b) { console.log("両方ともtrueです"); } else { console.log("どちらかがfalseです"); } |
結果:bは0なのでfalsy。よってelseが実行され、「どちらかがfalseです」と表示されます。
例2: ||(OR)演算子
|
1 2 3 4 5 6 7 |
let c = null; let d = "world"; if (c || d) { console.log("どちらかがtrueです"); } |
結果:dはtruthyなので、条件文を実行し、「どちらかがtrueです」と表示されます。
ポイント:論理演算子はtruthy/falsyの評価に大きく依存するため、誤解を招きやすいです。特に
||や&&を使った場合、意図しない結果になることがあります。
おすすめの使い分け方:状況に応じた判定方法
truthy/falsyは便利ですが、すべての場面で使ってよいわけではありません。特に「存在チェック」と「値チェック」を混同すると問題が発生します。
存在チェックと値チェックの違い
存在チェックとは、nullやundefinedかどうかを判断するもので、以下のように書きます:
|
1 2 3 4 |
if (value !== null && value !== undefined) { // 存在している場合の処理 } |
値チェックは、具体的な内容(例: 空文字や0)が含まれているかを判断します:
|
1 2 3 4 |
if (value) { // truthyの場合に処理(空文字や0はfalse扱い) } |
注意点:
[]や{}はtruthyとなるため、存在チェックとして使うには明示的な比較が必要です。
明示的なBoolean型への変換
truthy/falsyの挙動が予測しにくい場合は、Boolean()関数を使って明示的に評価すると安全です:
|
1 2 3 4 5 6 7 8 |
let value = ""; if (Boolean(value)) { console.log("valueはtrue"); } else { console.log("valueはfalse"); // 空文字なので実行される } |
おすすめの書き方:条件文で「
0や空文字」をtrueとみなしたい場合は、Boolean()を使って明示的に評価しましょう。
注意点とよくある間違い:実務で発生する典型例
truthy/falsyは便利ですが、誤った使い方をしている開発者も多いです。特に以下のようなミスに注意してください。
等価演算子(==)との混同
等価演算子==は、型の変換を行って比較するため、truthy/falsyと混同しやすいです:
|
1 2 3 4 |
if ("" == 0) { console.log("true"); // 型変換でtrueになる! } |
このコードでは""(空文字)が0に等しいと判定されますが、これは型変換による仕様です。
避けるべき書き方:
==ではなく、===を使った厳密な比較を推奨します。
ループ条件での落とし穴
ループの条件式でtruthy/falsyを使うと、意図しないループ回数になることがあります:
|
1 2 3 4 5 6 7 |
let i = 0; while (i) { console.log(i); i++; } |
このコードではi=0なのでfalsyとなり、ループは一度も実行されません。
注意点:
while (true)など、明示的な条件式を使うと読み間違いが減ります。
実際に試してみましょう:コードサンプルの実験
truthy/falsyを理解するには、実際に動かしながら学ぶことが効果的です。以下のような簡単な例で確認してください。
オンラインエディタでのテスト方法
- CodePenやJSFiddleなどを使って以下のコードを入力します。
- 実行結果を見て、truthy/falsyがどう評価されるか確認してください。
サンプルコード:truthy/falsyの挙動
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
console.log(Boolean(false)); // false console.log(Boolean(0)); // false console.log(Boolean("")); // false console.log(Boolean(null)); // false console.log(Boolean(undefined)); // false console.log(Boolean(NaN)); // false console.log(Boolean(true)); // true console.log(Boolean(1)); // true console.log(Boolean("0")); // true console.log(Boolean([])); // true console.log(Boolean({})); // true |
よくあるデバッグケース
-
例:0をfalseとして扱いたい場合
javascript
let value = 0;
if (value) {
console.log("OK");
} else {
console.log("NG"); // 実行される(0はfalsy)
} -
正しい処理:0をtrueとして扱いたい場合
javascript
let value = 0;
if (value !== 0) {
console.log("OK");
} else {
console.log("NG"); // 実行される(値が0なので)
}
まとめ:truthy/falsyのポイント
- truthyとは、
Boolean()変換でtrueとみなされるすべての値 - falsyは以下6つだけ:
false,0,"",null,undefined,NaN - 条件文ではtruthy/falsyが自動的に評価されるため、
if (value)のように書ける - ただし、明示的な存在チェックや厳密な比較が必要な場合は
!==やBoolean()を使う - 実務でよくある間違いは「0や空文字をfalseと誤解」「==の型変換による誤判定」など
実際にコードを動かしながらtruthy/falsyの挙動を理解し、条件文を正しく書けるようになりましょう!