JavaScript | 基礎構文:比較・論理 – 論理 AND

JavaScript JavaScript
スポンサーリンク

論理 AND とは何か

論理 AND(かつ)は、2つの条件が「どちらも真(true)」のときにだけ真になる演算です。JavaScriptでは && を使います。条件分岐や「範囲内チェック(下限以上かつ上限以下)」などで頻繁に登場します。

console.log(true && true);   // true
console.log(true && false);  // false
console.log(false && true);  // false
console.log(false && false); // false
JavaScript

基本的な使い方(複数条件の結合)

2つ以上の条件をつなげることで、「全部満たすなら通す」というロジックを簡潔に表現できます。例えば、年齢が18以上かつ会員であることをチェックします。

const age = 20;
const isMember = true;
if (age >= 18 && isMember) {
  console.log("利用可能");
} else {
  console.log("条件を満たしていません");
}
JavaScript

「範囲内チェック」は AND の定番です。下限以上かつ上限以下の両方が必要です。

const x = 75;
if (x >= 50 && x <= 100) {
  console.log("範囲内");
}
JavaScript

短絡評価(ショートサーキット)の仕組み

論理 AND は左側が false の時点で右側を評価しません。これを「短絡評価(ショートサーキット)」と言います。高コスト処理や未定義アクセスを避けるのに使えます。

function heavy() {
  console.log("重い処理");
  return true;
}

const ok = false && heavy(); // 左が false なので heavy() は呼ばれない
console.log(ok); // false
JavaScript

存在チェックと組み合わせると、安全にネストしたプロパティへアクセスできます。

const user = { profile: { name: "Taro" } };
const name = user && user.profile && user.profile.name; // "Taro"
JavaScript

左が falsy(後述)なら、右は評価されずその falsy 値が返ります。これを利用して「条件が満たされたら右側の処理をする」という書き方もできます。

const loggedIn = true;
loggedIn && console.log("ログイン済み"); // 条件が真なら実行
JavaScript

真偽値だけではない挙動(値を返す規則)

&& は常に true/false を返すわけではありません。「左が真なら右の値、左が偽なら左の値」をそのまま返します。これを理解すると、条件付きの値選択に使えます。

console.log(true && "OK");   // "OK"(左が真 → 右を返す)
console.log(false && "OK");  // false(左が偽 → 左を返す)
console.log(1 && 2);         // 2(1は真扱い → 右を返す)
console.log(0 && "X");       // 0(0は偽扱い → 左を返す)
JavaScript

この性質を使って「条件を満たせば値、満たさなければ何もしない」という表現ができます。UIの表示切り替えや、関数のオプショナル実行で便利です。

const hasError = false;
const message = hasError && "エラーが発生しました"; // false(表示しない)
JavaScript

falsy と truthy(AND の評価に効く値)

JavaScriptでは、真偽値以外にも「偽として扱われる値(falsy)」があります。代表的な falsy は false, 0, -0, 0n, "", null, undefined, NaN です。それ以外の値は基本的に truthy(真扱い)になります。

console.log("" && "A");       // ""(空文字は偽)
console.log(undefined && 1);  // undefined(偽)
console.log("hello" && 1);    // 1(truthy → 右を返す)
JavaScript

falsy の存在を理解していないと、「空文字をエラー扱いしたくないのに弾かれてしまう」などの誤作動につながります。必要に応じて、厳密な比較や明示的なチェックを使いましょう。


実用パターンと注意点

安全なアクセスガード

ネストオブジェクトの存在確認とアクセスをまとめられます。ただし ES2020 以降はオプショナルチェーン(user?.profile?.name)がより安全で読みやすい手段です。

const name = user && user.profile && user.profile.name;
JavaScript

条件付き実行(副作用のある処理)

条件が真のときだけ関数を呼びたい場合に簡潔に書けます。ただし「式に副作用」を入れると読みづらいことがあるため、チームのコーディング規約に従いましょう。

isReady && start();
JavaScript

デフォルト値との組み合わせには注意

AND は「条件を満たさないと左(偽値)を返す」ため、デフォルト値を返したい場合は OR(||)のほうが向いています。用途に合わせて選びます。

const input = "";
const value = input && "使う値"; // ""(空文字が返る)
const valueOrDefault = input || "デフォルト"; // "デフォルト"
JavaScript

例題で理解する

例題1:範囲内かつ会員の判定

function canUse(score, isMember) {
  return score >= 60 && isMember;
}
console.log(canUse(75, true));  // true
console.log(canUse(75, false)); // false
JavaScript

例題2:存在チェックしてから長さを読む

function safeLength(s) {
  return s && s.length; // sがfalsyならその値、truthyならlength
}
console.log(safeLength("abc")); // 3
console.log(safeLength(""));    // ""(空文字はfalsy)
console.log(safeLength(null));  // null
JavaScript

例題3:ログイン時のみ表示

const loggedIn = true;
loggedIn && console.log("ようこそ!");
JavaScript

例題4:ショートサーキットで重い処理を抑止

function heavy() {
  console.log("重い処理実行");
  return true;
}
const flag = false;
flag && heavy(); // 実行されない(左がfalse)
JavaScript

まとめ

論理 AND(&&)は「すべての条件が真なら真」という基本に加え、短絡評価で右側の評価をスキップし、真偽値以外では「左が真なら右、左が偽なら左」を返すという挙動を持ちます。範囲チェック、存在ガード、条件付き実行などに非常に便利ですが、falsy・truthy の理解が不可欠です。型や値を意図どおりに扱うために、必要なときは明示的な比較やオプショナルチェーンとの使い分けを心がけましょう。

タイトルとURLをコピーしました