JavaScript 比較演算子と論理演算子

比較演算子と論理演算子は、真偽をテストするために使用されます。

比較演算子

比較演算子は論理文で使用され、変数や値の等価性または差異を判断します。

例として、x = 5 とした場合、以下のテーブルは比較演算子を説明します:

演算子 説明 比較するもの 結果
== 等しい x == 8 false
== 等しい x == 5 true
== 等しい x == “5” true
=== 値と型が等しい x === 5 true
=== 値と型が等しい x === “5” false
!= 等しくない x != 8 true
!== 値または型が等しくない x !== 5 false
!== 値または型が等しくない x !== “5” true
> より大きい x > 8 false
< より小さい x < 8 true
>= 以上 x >= 8 false
<= 以下 x <= 8 true

使用方法

比較演算子は条件文で使用して、値を比較し、その結果に応じてアクションを取ることができます:


if (age < 18) {
  text = "アルコールを購入するには若すぎます";
}

このチュートリアルの次の章で条件文の使用方法についてさらに学びます。

論理演算子

論理演算子は変数や値の間の論理を決定するために使用されます。

例として、x = 6 および y = 3 とした場合、以下のテーブルは論理演算子を説明します:

演算子 説明
&& 論理積 (x < 10 && y > 1)
|| 論理和 (x == 5 || y == 5)
! 論理否定 !(x == y)

条件(三項)演算子

JavaScriptには条件演算子も含まれており、ある条件に基づいて変数に値を割り当てます。

構文:


variablename = (condition) ? value1 : value2;

例:


let voteable = (age < 18) ? "アルコールを購入するには若すぎます" : "成人です";

もし変数 age が18未満の値であれば、変数 voteable の値は "アルコールを購入するには若すぎます" となります。それ以外の場合は "成人です" となります。

異なる型の比較

異なる型のデータを比較すると予期しない結果が得られることがあります。

文字列と数値を比較する場合、JavaScriptは比較を行う際に文字列を数値に変換します。空の文字列は0に変換され、非数値文字列は常にfalseになるNaNに変換されます。

ケース 結果
2 < 12 true
2 < "12" true
2 < "John" false
2 > "John" false
2 == "John" false
"2" < "12" false
"2" > "12" true
"2" == "12" false

二つの文字列を比較するとき、"2" は "12" より大きいと判断されます。なぜなら(辞書順で)1は2より小さいからです。

正しい結果を得るためには、比較する前に変数を適切な型に変換する必要があります:


age = Number(age);
if (isNaN(age)) {
  voteable = "数値ではありません";
} else {
  voteable = (age < 18) ? "アルコールを購入するには若すぎます" : "成人です";
}

Nullish結合演算子 (??)

??演算子は、最初の引数がnullish(nullまたはundefined)でない場合、その値を返します。そうでない場合は、第二引数を返します。

例:


let name = null;
let text = "欠落";
let result = name ?? text;

nullish演算子は2020年3月以降のすべてのブラウザでサポートされています:

  • Chrome 80
  • Edge 80
  • Firefox 72
  • Safari 13.1
  • Opera 67

オプショナルチェイニング演算子 (?.)

?.演算子はオブジェクトがundefinedまたはnullの場合、エラーをスローせずにundefinedを返します。

例:


// オブジェクトを作成:
const car = {type:"Fiat", model:"500", color:"white"};
// 車の名前を取得:
document.getElementById("demo").innerHTML = car?.name;

オプショナルチェイニング演算子は2020年3月以降のすべてのブラウザでサポートされています:

  • Chrome 80
  • Edge 80
  • Firefox 72
  • Safari 13.1
  • Opera 67