論理演算子

JavaScript で用意されている演算子の中で、複数の関係演算子を組みあわせてより複雑な条件式を作成するために使用する論理演算子の種類と使い方について解説します。

(Last modified: )

論理演算子の種類と使い方

論理演算子には次の 3 種類が用意されています。

&&  論理積
||  論理和
!   論理否定

論理積は演算子の前および後ろの式が共に true の場合に全体が true となります。論理和は演算子の前または後ろの少なくともどちらかの式が true の場合に true となります。論理否定は演算子の後の式が true ならば false 、 false ならば true となります。

次のサンプルをみてください。

let old = 28;

if (old > 20 && old < 30){
  console.log('対象年齢です');
}else{
  console.log('対象年齢ではありません');
}

>> 対象年齢です

上記では条件式として関係演算子を使った 2 つの式に対して論理積 && が記述されています。今回は論理積の前および後ろの式がどちらも true となるため条件式全体も true となり、 if 文のブロックの中の処理が実行されました。

なお論理演算子の前および後ろの値は true または false である必要はなく、それ以外の値(例えば数値とか文字列)が記述された場合はルールに従って true または false とみなされます。(どのような値が true または false とみなされるのかについては「trueとみなされる値とfalseとみなされる値」を参照されてください)。

このように論理演算子は 1 つまたは 2 つの論理値を組み合わせて全体として 1 つの論理値を返す演算子となります。ただ実際にはもう少し複雑な処理が行われますので一つ一つ確認していきます。

論理積(&&)

論理積では演算子の前および後ろの値が共に true の場合に true となります。それ以外は false となります。

全体
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

JavaScript では論理積が含まれている式 a && b の評価について次のように行います。

a && b

最初に演算子の前にある a の評価を行います。 a が false の場合は b の評価に関わらず式全体の評価は false となるため、 b の評価を行わずに式全体の評価として a の値( a が式だった場合は式を評価した値)をそのまま返します。

サンプルを 2 つ見てください。

let x = 10;

console.log(x > 20 && x < 40);
>> false

このサンプルでは x > 20 が false となるので x < 40 の評価は行わず、式全体の評価として x > 20 を評価した値である false が返されます。

let x = 10;

console.log(null && x < 30);
>> null

このサンプルでは null は false として扱われるので x < 30 の評価は行わず、式全体の評価として null が返されます。このように JavaScript では論理演算子の結果として true や false だけでなくいろいろな値が返される点にご注意ください。

次に演算子の前にある a の評価が true だった場合です。この場合は b の評価を行いますが、 b の評価も true ならば全体の評価も true b の評価が false ならば全体の評価は false となります。このとき全体の評価として true や false を返すのではなく b の値( b が式だった場合は式を評価した値)をそのまま返します。

サンプルを 2 つ見てください。

let x = 30;

console.log(x > 20 && x < 40);
>> true

このサンプルでは x > 20 が true となるので式全体の評価として x < 40 を評価した値である true が返されます。

let x = 10;

console.log(x > 0 && 'OK');
>> OK

このサンプルでは x > 0 が true となるので式全体の評価として 'OK' が返されます。

このように論理積を使った式では true や false だけでなくいろんな値が返されますが、 if 文の条件式など論理値を要求される場所では、帰ってきた値はルールに従って true または false としてみなされるためあまり意識される必要はありません。(どのような値が true または false とみなされるのかについては「trueとみなされる値とfalseとみなされる値」を参照されてください)。

例えば null が返ってきた場合は false とみなされるので false が返ってきたのと同じことですし、 'OK' が返ってきた場合は true とみなされるので true が返ってきたのと同じです。

論理和(||)

論理和では演算子の前または後ろの値の少なくとも一つが true の場合に true となります。

全体
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

JavaScript では論理和が含まれている式 a || b の評価について次のように行います。

a || b

最初に演算子の前にある a の評価を行います。 a が true の場合は b の評価に関わらず式全体の評価は true となるため、 b の評価を行わずに式全体の評価として a の値( a が式だった場合は式を評価した値)をそのまま返します。

サンプルを 2 つ見てください。

let x = 84;
let y = 72;

console.log(x > 80 || y > 80)
>> true

このサンプルでは x > 80 が true となるので y > 80 の評価は行わず、式全体の評価として x > 80 を評価した値である true が返されます。

let mail = 'user@example.com';
let user = '';

console.log(mail || user)
>> null

このサンプルでは変数 mail は true として扱われるので user の評価は行わず、式全体の評価として変数 mail に格納されている 'user@example.com' が返されます。(条件式などでは空文字以外の文字列は true とみなされます)。

次に演算子の前にある a の評価が false だった場合です。この場合は b の評価を行いますが、 b の評価が true ならば全体の評価も true b の評価が false ならば全体の評価は false となります。このとき全体の評価として true や false を返すのではなく b の値( b が式だった場合は式を評価した値)をそのまま返します。

サンプルを 2 つ見てください。

let x = 75;
let y = 72;

console.log(x > 80 || y > 80)
>> false

このサンプルでは x > 80 が false となるので式全体の評価として y > 80 を評価した値である false が返されます。

let mail = '';
let user = 'user';

console.log(mail || user)
>> user

このサンプルでは mail の評価が false となるので式全体の評価として変数 user に格納されている 'user' が返されます。(条件式などでは空文字以外の文字列は true とみなされます)。

論理積と同じく論理和を使った式では true や false だけでなくいろんな値が返されますが、 if 文の条件式など論理値を要求される場所では、帰ってきた値はルールに従って true または false としてみなされるためあまり意識される必要はありません。

論理否定(!)

論理否定では演算子の後ろの値が true の場合は false となり、 false の場合は true となります。

全体
truefalse
falsetrue

論理積や論理和とは異なり、論理否定では必ず true または false が返されます。

サンプルを 2 つ見てください。

let x = 75;

console.log(!(x > 80))
>> true

このサンプルでは x > 80 が false となるので式全体の評価としては true が返されます。

console.log(! undefined)
>> true

このサンプルでは undefined が false となるので式全体の評価としては true が返されます。

論理演算子の優先順位について

論理演算子は関係演算子や等価演算子と一緒に使われることが多い演算子ですが、演算子の優先順位について注意点があります。

論理演算子と関係演算子、等価演算子に関する優先順位は次のようになっています。(すべての演算子の優先順位については「演算子の優先順位と結合規則」を参照されてください)。

優先順位結合規則演算子説明
17!論理否定
12>大きい
>=以上
<小さい
<=以下
11==等しい
!=等しくない
===同一
!==同一ではない
7&&論理積
6||論理和

論理積(&&)と論理和(||)は演算子の優先順位が関係演算子や等価演算子よりも低いため、次のように記述しても問題はありません。

x > 80 || y > 80

ただ論理積(!)は演算費の優先順位が関係演算子や等価演算子よりも高いため、次のように記述してしまうと先に論理積の演算が行われてしまい予期せぬ結果となります。

! x > 80

論理積(!)と関係演算子や等価演算子を合わせて記述する場合は、グループ化の括弧()を使って次のように記述してください。

!(x > 80)

-- --

JavaScript で用意されている演算子の中で、複数の関係演算子を組みあわせてより複雑な条件式を作成するために使用する論理演算子の種類と使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。