論理値と論理演算子
論理値
JavaScript で利用できる「値」として、これまで文字列と数値を扱いました。 JavaScript にはこの他に、論理値と呼ばれる、「正しいか、正しくないか」を表すための値が存在します。
次のプログラムを実行すると、true
と表示されます。
document.write(true);
このように論理値は、ダブルクォーテーション "
を使わずに直接 true
(「正しい」という意味) または false
(「正しくない」という意味) と書くことにより表現します。
論理値も文字列や数値と同じように値の一種なので、変数に代入したり、計算に使ったりすることができます。
論理演算子
論理値に対して使える演算子が存在します。
document.write(!true); // false
document.write(true && false); // false
document.write(true || false); // true
それぞれの演算子の意味は次のようになります。
演算子 | 意味 | 詳細 |
---|---|---|
! | ~ではない | true ならば false 、false ならば 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 行目では age
と 12
は等しいので true
になり、3 行目では age
と 13
は等しくないので 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
と同じ意味になります。