サンプル・プログラム
比較演算子:Number型
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let a = 3, b = 2;
23: let c;
24: document.getElementById('ret1').innerHTML = 'a = ' + a.toString();
25: document.getElementById('ret2').innerHTML = 'b = ' + b.toString();
26:
27: c = a > b;
28: document.getElementById('ret3').innerHTML = 'a > b ... ' + c.toString();
29: c = a < b;
30: document.getElementById('ret4').innerHTML = 'a < b ... ' + c.toString();
31: c = a == b;
32: document.getElementById('ret5').innerHTML = 'a == b ... ' + c.toString();
33: c = a != b;
34: document.getElementById('ret6').innerHTML = 'a != b ... ' + c.toString();
35: }
36: </script>
比較演算子:String型
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let a = 'abc', b = 'abd';
23: let c;
24: document.getElementById('ret1').innerHTML = 'a = ' + a.toString();
25: document.getElementById('ret2').innerHTML = 'b = ' + b.toString();
26:
27: c = a > b;
28: document.getElementById('ret3').innerHTML = 'a > b ... ' + c.toString();
29: c = a < b;
30: document.getElementById('ret4').innerHTML = 'a < b ... ' + c.toString();
31: c = a == b;
32: document.getElementById('ret5').innerHTML = 'a == b ... ' + c.toString();
33: c = a != b;
34: document.getElementById('ret6').innerHTML = 'a != b ... ' + c.toString();
35: }
36: </script>
比較演算子:厳密等価と厳密不等価
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let a = 123, b = '123';
23: let c;
24: document.getElementById('ret1').innerHTML = 'a = ' + a.toString() + '...' + typeof a;
25: document.getElementById('ret2').innerHTML = 'b = ' + b.toString() + '...' + typeof b;
26:
27: c = a > b;
28: document.getElementById('ret3').innerHTML = 'a > b ... ' + c.toString();
29: c = a < b;
30: document.getElementById('ret4').innerHTML = 'a < b ... ' + c.toString();
31: c = a == b;
32: document.getElementById('ret5').innerHTML = 'a == b ... ' + c.toString();
33: c = a != b;
34: document.getElementById('ret6').innerHTML = 'a != b ... ' + c.toString();
35: c = a === b;
36: document.getElementById('ret7').innerHTML = 'a === b ... ' + c.toString();
37: c = a !== b;
38: document.getElementById('ret8').innerHTML = 'a !== b ... ' + c.toString();
39: }
40: </script>
「2.2 データ型 - 動的型付け」で紹介したように、JavaScriptでは動的型付けが行われるため、等価演算子 123 == '123' はtrueになる。厳密等価演算子を使うとfalseになる。
予期しないバグの温床になるため、JavaScriptで等価比較を行う際は、厳密等価演算子を用いた方が無難である。
論理演算子
IE10以前では、ユーザーエージェント(navigator.userAgent)に 'MEIE' という文字列が含まれている。IE11では、これが 'Trident' という文字列に替わる。
これをプログラムにしたものが "logic1.html" である。
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let ua = navigator.userAgent.toUpperCase(); //大文字変換
23: let res; //判定結果
24:
25: //ユーザーエージェントで判定
26: if (ua.indexOf('MSIE') > -1) {
27: res = 'IEです';
28: } else if (ua.indexOf('TRIDENT') > -1) {
29: res = 'IEです';
30: } else {
31: res = 'IEではありません';
32: }
33:
34: //結果表示
35: document.getElementById('res').innerHTML = res;
36: }
37: </script>
これを、あとで説明するif~else if~else文を使って場合分け判別している。
ただ、1つめのif文と、2つめのelse if文は、いずれも「IEである」場合だ。これを1つにまとめた方が、プログラムが短くなるし、バグを減らす効果もある。
こういうときに使うのが論理演算子である。
2つ以上の式がすべて成り立つか(論理積)、いずれか1つ以上が成り立つか(論理和)、1つも成り立たないか(論理否定)の3種類がある。
演算子 | 意味 |
---|---|
&& | 論理積(AND) |
|| | 論理和(OR) |
! | 論理否定(NOT) |
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let ua = navigator.userAgent.toUpperCase(); //大文字変換
23: let res; //判定結果
24:
25: //ユーザーエージェントで判定
26: if ((ua.indexOf('MSIE') > -1) || (ua.indexOf('TRIDENT') > -1)) {
27: res = 'IEです';
28: } else {
29: res = 'IEではありません';
30: }
31:
32: //結果表示
33: document.getElementById('res').innerHTML = res;
34: }
35: </script>
比較演算子と論理演算子の組み合わせ
たとえば、1980年代生まれかどうかを判断するプログラムが "comp3.html" である。生年は乱数 Math.random() を使って発生させる。
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let year = Math.floor(1950 + Math.random() * 70);
23: let a = '';
24: document.getElementById('year').innerHTML = year.toString();
25:
26: if ((year >= 1980) && (year <= 1989)) {
27: a = 'です';
28: } else {
29: a = 'ではありません';
30: }
31: document.getElementById('ret').innerHTML = a;
32: }
33: </script>
19: <script>
20: //ページのロード時に実行
21: window.onload = function() {
22: let year = Math.floor(1950 + Math.random() * 70);
23: let a = '';
24: document.getElementById('year').innerHTML = year.toString();
25:
26: if ((year < 1980) || (year > 1989)) {
27: a = 'ではありません';
28: } else {
29: a = 'です';
30: }
31: document.getElementById('ret').innerHTML = a;
32: }
33: </script>
このときの論理積(AND)と論理和(OR)の関係を表したのが下の数直線である。
コラム:集合と論理
ここでは、真理値表とベン図を掲載する。どうか高校数学の参考書の該当箇所を併読いただきたい。
数値の範囲で判断するときには、比較演算子と論理演算子を組み合わせて使う。