論理値と論理演算子
論理値
JavaScriptで利用できる「値」として、これまで文字列と数値を扱いました。JavaScriptではこの他に、論理値と呼ばれる、「正しいか、正しくないか」を表すための値が存在します。
論理値は、true(真)またはfalse(偽)の2つだけです。ダブルクォーテーション"は必要ありません。通常の値ですので、変数に代入したり、計算に使ったりすることができます。
論理演算子
論理値に対して適用できる演算子が存在します。
document.write(true); // true
document.write(!false); // true
document.write(true && false); // false
document.write(true || false); // true
各演算子の意味は次の通りです。!のみが作用する対象を1つしかとらないことに注意してください。
| 演算子 | 意味 | 詳細 |
|---|---|---|
! | ~ではない | trueならばfalse、falseならばtrue |
&& | かつ | 両方trueならばtrue、どちらか1つでもfalseならばfalse |
|| | または | 両方falseならばfalse、どちらか1つでもtrueならばtrue |
具体的な使用例を考えてみましょう。
モンスターが大きいかどうかを表す変数isMonsterBigと、ハンターが強いかどうかを表す変数isHunterStrongが用意されています。このとき、ハンターがモンスターと戦うべきかどうかを表す変数shouldFightを作りたいとします。ハンターは自分が強いときかモンスターが小さいときに戦うべきだとしたら、変数shouldFightは次のようになるでしょう。
const isMonsterBig = true;
const isHunterStrong = false;
const shouldFight = isHunterStrong || !isMonsterBig; // false
比較演算子
比較演算子は、複数の値を比較して、単一の論理値を得ます。
年齢を判定するプログラムを考えましょう。
const age = 14;
document.write(age === 15); // false
document.write(age === 14); // true
===は左辺と右辺が等しいかどうか判定する比較演算子です。2行目ではageと15とは等しくないのでfalseが、3行目ではageと14とは等しいのでtrueが表示されます。
各演算子の意味は次の通りです。
| 演算子 | 意味 | 詳細 |
|---|---|---|
=== | 等しい | 左辺と右辺が等しければtrue |
!== | 等しくない | 左辺と右辺が等しければfalse |
< | 小なり | 左辺が右辺より小さければtrue |
<= | 以下 | 左辺が右辺以下ならばtrue |
> | 大なり | 左辺が右辺より大きければtrue |
>= | 以上 | 左辺が右辺以上ならばtrue |
さらに具体的な使用例を考えてみましょう。
ジェットコースターに乗れるかどうかを表す変数canRideRollerCoastersを考えます。年齢を表す変数ageと身長を表す変数heightが与えられたとして、10歳以上かつ身長が120cm以上でないと乗れないとしたら以下のようになるでしょう。
const age = 15;
const height = 155;
const canRideRollerCoasters = age >= 10 && height >= 120; // true
&&や||よりも比較演算子の方が優先順位が高いため、複数の条件を「かつ」「または」などで組み合わせることは容易です。
次のコードは何を表示するでしょうか。そしてそれはなぜでしょうか。
let takaoHeight = 599;
let everestHeight = 8849;
let fujiHeight = 3776;
document.write(takaoHeight < everestHeight < fujiHeight);
document.write(takaoHeight = everestHeight);
- JavaScript で、数値と論理値に比較演算子を適用すると、
trueは1として、falseは0として比較されます。 =は代入演算子です。代入演算子の式が評価されると、右辺の値になります。
演習問題
クイズ番組で田中さんと佐藤さんが戦っています。田中さんの点数がtanakaScoreで、佐藤さんの点数がsatoScoreで用意されています。
点数が100点以上で、かつ相手より20点以上高い点数の場合に勝ちとします。田中さんが勝ちかどうかを表す変数isTanakaWinnerを作成してください。
const tanakaScore = 120;
const satoScore = 80;
const isTanakaWinner = /* ここに式を書いてください */;
document.write(isTanakaWinner); // true
+, -, *, /などの算術演算子は、比較演算子よりも優先順位が高いです。
const isBig = 10 + 5 > 10 - 3; // 15 > 7 なので true
解答例: クイズ番組
const tanakaScore = 120;
const satoScore = 80;
const isTanakaWinner = tanakaScore >= 100 && tanakaScore - satoScore >= 20;
document.write(isTanakaWinner); // true