プログラム中には様々な演算子が登場します。代入演算子、比較演算子、算術、ビット、文字列などなど。
今回はその中から「論理演算子」の使い方を詳しくご紹介します。
また基礎をしっかり身につけた後は応用のプログラムやエラー対処の方法も学べるようになっているので、ここで論理演算子の扱いについてしっかり学んでおきましょう!
目次
JSの論理演算子
論理演算子ではブール値(bool)という値を使います。bool値の説明は後に回すとして、さっそく論理演算子の基本を見ていきましょう。
論理積|AND(&&)
論理積は指定した条件が全てtrue(真)の場合にのみ、trueになる演算子です。
プログラム中では&&を使って表現され、口頭で示す際は「AND(アンド)」か「かつ」と言います。
1 2 3 |
var bool1 = true && true; // ->true var bool2 = true && false; // ->false var bool3 = false && true; // ->false |
このように指定した条件が全てtrue出ない場合は、falseが返却されます。
論理和|OR(||)
論理和は指定した条件のいずれかがtrue(真)であれば、結果がtrueになる演算子です。
プログラム中では||を使って表現され、口頭では「OR(オア)」か「または」と言います。
1 2 3 4 |
var bool1 = true || true; // ->true var bool2 = true || false; // ->true var bool3 = false || true; // ->true var bool4 = false || false; // ->false |
逆にORの場合は条件のうちに一つでもtrueがあれば結果はtrueになります。
論理否定|NOT(!)
ANDやORと異なり、評価する値のtrue(真)とfalse(偽)を反転させる演算子です。
1 2 |
var bool1 = !true; // ->false var bool2 = !false; // ->true |
NOTではtrueまたはfalseが反転するため、!trueは「trueではない」となり、結果はflaseになります。
論理演算子の優先順位
実は演算子には優先順位が決まっており、必ず右から左に順番に実行されるわけではありません。
例えば次のプログラムでは右から実行されるとすれば
true && false → false
1 |
true || false && false -> true |
論理演算子の優先順位を変えたい場合
しかし(括弧)を使えば、論理演算子だけでなく全ての演算子の優先順位を操作できます。
1 |
(true || false) && false // ->false |
先にOR演算子を実行させるために、OR演算を括弧で囲いました。括弧はどの演算子よりも優先されるので、最初にOR演算を実行し、その後にAND演算が行われます。
【初心者向け】JavaScriptの条件分岐の方法は?基本事項から実践的なコード例まで解説!ブール値(bool値)とは何なのか?
ここまでtrueとflaseの値を当たり前のように使用してきましたが、実はこれらは普通の値とは異なるブール値[boolean value]に分類されます。
ブール値の値は真または偽で表されますが、関数によっては0と1で判定することもあります。これはコンピューターが0と1の二つの数字のみで表される2進数しか扱えないから。つまり
false = 0
のようにも表すことが出来ます。プログラム中ではこの0と1を使用する場面が多いので、しっかり覚えておきましょう。
補足1:短絡評価について
補足として短絡評価についてご説明します。
短絡評価とはいくつかの真偽判定を行った時点で、もう結果が分かっている場合はそれから先の真偽判定は行われない機能を指します。
JavaScriptの場合は式が左から右へと評価されるので、例えばAND演算子がある式で、最初の値がfalseであればそこから先の評価は行われません。
→最初のfalseで結果が決まっている
この機能については覚えなくても問題ありませんが、こういった機能になっているという概要をしっかり押さえておきましょう。
補足2:falseになる値
先ほど0もfalseになると説明しましたが、実はfalseになる値は他にもいくつかあります。
・0
・-0
・null
・NaN
・空文字列(””、’ ‘、
)・undefined
falseや0は既に登場しましたね。しかしnull値やNaN、さらには文字列もfalseと判定されます。これらはしっかり覚えておくことでエラーを防ぎ、より柔軟なプログラム作成に役立ちます。
またこのfalse以外の値は「全てtrue」になります。
JS論理演算子のサンプルプログラム
ではここからは論理演算子を用いたサンプルプログラムをいくつかご紹介します。
1 2 3 4 5 6 7 |
var num = Math.floor(Math.random() * 100); if ((num < 40) || (num >= 50)) { console.log("40未満50以上の値"); } else { console.log(num); } |
このプログラムではMath.randomで乱数を発生させ、0~39、50~99だった場合は「40以上50未満の値」と表示されます。
Math.randomは0~1未満の疑似乱数が生成されるので、100をかけて小数点以下は切り下げる処理を行いました。
ここで使用したのはOR演算子。条件1の「0~39」または条件2の「50~100」のどちらかに当てはまるとifの下にある条件が実行されます。
1 2 3 4 5 6 7 |
var num = Math.floor(Math.random() * 100); if ((num >= 20) && (num < 50)) { console.log("20以上50未満の値"); } else { console.log(num); } |
続いてはAND演算子を使用して20~49の値だけ処理が実行されるプログラムを作成しました。その他の処理はサンプルプログラム①と同じです。
1 2 3 4 5 6 7 |
var num = Math.floor(Math.random() * 100); if ((num <= 10) || ((num >= 30) && (num < 40)) || (num >= 90)) { console.log("10以下または30~40未満、90以上の数"); } else { console.log(num); } |
さらに範囲を設定してみましょう。今度は3つの条件を設け、「10以下」「30~39」「90以上」の値の場合のみに実行されるように設定しました。
このように論理演算子を使えば、if文の条件分岐を細かく設定できるのです。
まとめ
今回はJavaScriptのAND、OR、NOTを含む論理演算子について解説しました。基本はシンプルですが、自由に使いこなすには経験を積むのが大切。
インプットしたことをしっかり活かす「アウトプット」を怠らずに頑張りましょう!
【初心者向け】JavaScript prototypeの使い方と継承