メインコンテンツまでスキップ

論理値と論理演算子

論理値

JavaScript で利用できる「」として、これまで文字列数値を扱いました。 JavaScript にはこの他に、論理値と呼ばれる、「正しいか、正しくないか」を表すためのが存在します。

次のプログラムを実行すると、true と表示されます。

document.write(true);

このように論理値は、ダブルクォーテーション " を使わずに直接 true (「正しい」という意味) または false (「正しくない」という意味) と書くことにより表現します。

論理値文字列数値と同じようにの一種なので、変数代入したり、計算に使ったりすることができます。

値の種類・論理値付き

論理演算子

論理値に対して使える演算子が存在します。

document.write(!true); // false
document.write(true && false); // false
document.write(true || false); // true

それぞれの演算子の意味は次のようになります。

演算子意味詳細
!~ではないtrue ならば falsefalse ならば true
&&かつ両方 true ならば true、どちらか 1 つでも false ならば false
||または両方 false ならば false、どちらか 1 つでも true ならば true

具体的な使用例を考えてみましょう。

ハンターが強いかどうかを表す変数 isHunterStrong とモンスターが大きいかどうかを表す変数 isMonsterBig が用意されています。

このとき、ハンターがモンスターと戦うべきかどうかを表す変数 shouldFight を作りたいとします。

ハンターは自分が強いときかモンスターが小さいときに戦うべきだとしたら、変数 shouldFight は次のようになるでしょう。

let isHunterStrong = false;
let isMonsterBig = true;
let shouldFight = isHunterStrong || !isMonsterBig; // false

比較演算子

比較演算子は、複数のを比較して、1 つの論理値を得ます。

年齢を判定するプログラムを考えてみましょう。

let age = 12;
document.write(age === 12); // true
document.write(age === 13); // false

=== は左辺と右辺が等しいかどうかを判定する比較演算子です。 上のプログラムの 2 行目では age12 は等しいので true になり、3 行目では age13 は等しくないので false になります。

他にも次のような比較演算子があります。

演算子意味詳細
===等しい左辺と右辺が等しければ true
!==等しくない左辺と右辺が等しければ false
<小なり左辺が右辺より小さければ true
<=以下左辺が右辺以下ならば true
>大なり左辺が右辺より大きければ true
>=以上左辺が右辺以上ならば true

論理演算子と比較演算子を組み合わせた使用例を考えてみましょう。

年齢を表す変数 age と身長を表す変数 height が用意されています。

このとき、ジェットコースターに乗れるかどうかを表す変数 canRideRollerCoasters を作りたいとします。

10 歳以上かつ身長が 120 cm 以上でないと乗ることができないとしたら、変数 canRideRollerCoasters は次のようになるでしょう。

let age = 12;
let height = 150;
let canRideRollerCoasters = age >= 10 && height >= 120; // true
ヒント

&&|| などの論理演算子よりも比較演算子のほうが先に計算されます。 そのため、age >= 10 && height >= 120(age >= 10) && (height >= 120) と同じ意味になります。

演習問題

クイズ番組で田中さんと鈴木さんが戦っています。

田中さんの点数を表す変数 tanakaScore と、鈴木さんの点数を表す変数 suzukiScore が用意されています。

点数が 100 点以上で、かつ相手より 20 点以上高い場合に勝ちとします。

田中さんが勝ちかどうかを表す変数 isTanakaWinner を作成してください。

let tanakaScore = 120;
let suzukiScore = 100;
let isTanakaWinner = /* ここを書いてください。 */;
document.write(isTanakaWinner); // true
解答例: クイズ番組
let isTanakaWinner = tanakaScore >= 100 && tanakaScore - suzukiScore >= 20;
ヒント

+-*/ などの演算子は、比較演算子よりも先に計算されます。 そのため、tanakaScore - suzukiScore >= 20(tanakaScore - suzukiScore) >= 20 と同じ意味になります。