論理 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(表示しない)
JavaScriptfalsy と 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 → 右を返す)
JavaScriptfalsy の存在を理解していないと、「空文字をエラー扱いしたくないのに弾かれてしまう」などの誤作動につながります。必要に応じて、厳密な比較や明示的なチェックを使いましょう。
実用パターンと注意点
安全なアクセスガード
ネストオブジェクトの存在確認とアクセスをまとめられます。ただし 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 の理解が不可欠です。型や値を意図どおりに扱うために、必要なときは明示的な比較やオプショナルチェーンとの使い分けを心がけましょう。
