JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのObject.is()メソッドによる等価比較の使い方を徹底解説

ES6(ECMAScript 2015)で導入されたObject.is()メソッドは、2つの値を比較するための手法です。比較対象はプリミティブ値でもオブジェクトでも構いません。

従来の等価演算子である==(抽象的等価)や===(厳密等価)と比べて、より正確で直感的な比較ができるのが特徴です。特に、NaN同士の比較や+0-0の区別など、===では扱いにくかったケースを適切に処理できます。

Object.is()の主な特徴

  • NaN === NaNfalse になりますが、Object.is(NaN, NaN)true を返します
  • +0 === -0true になりますが、Object.is(+0, -0)false を返します
  • オブジェクト同士の比較では、参照(メモリ上の同一性)が一致するかどうかを判定します

Object.is()を使った等価比較のコード例

以下は、Object.is()メソッドを使ってオブジェクトを比較するサンプルコードです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .result {
        font-size: 18px;
        font-weight: 500;
        color: blueviolet;
    }
</style>
</head>
<body>
<h1>Object.is() による等価比較</h1>
<div class="result"></div>
<button class="Btn">ここをクリック</button>
<h3>上のボタンをクリックすると、Object.is()でオブジェクトを比較します</h3>
<script>
    let resEle = document.querySelector(".result");
    let BtnEle = document.querySelector(".Btn");
    let obj = { a: 11, b: 22 };
    let obj1 = { a: 11, b: 22 };
    let obj2 = obj;
    BtnEle.addEventListener("click", () => {
        if (Object.is(obj, obj1)) {
            resEle.innerHTML = "obj = obj1";
        } else {
            resEle.innerHTML = "obj != obj1 <br>";
        }
        if (Object.is(obj, obj2)) {
            resEle.innerHTML += "obj = obj2";
        }
    });
</script>
</body>
</html>

実行結果

このコードでは、同じプロパティを持つ2つの独立したオブジェクト(objobj1)と、objへの参照を代入したobj2を用意しています。

「ここをクリック」ボタンを押すと、次のように表示されます。

JavaScriptのObject.is()メソッドによる等価比較の使い方を徹底解説

ボタンクリック後の表示結果:

JavaScriptのObject.is()メソッドによる等価比較の使い方を徹底解説

結果の解説

  • objobj1 はプロパティの内容が同じでも、それぞれ別のオブジェクトインスタンスであるため、Object.is(obj, obj1)false を返し、「obj != obj1」と表示されます。
  • obj2obj への参照を持っているため、両者は同一のオブジェクトを指しており、Object.is(obj, obj2)true を返し、「obj = obj2」と表示されます。

このように、Object.is()はオブジェクトの比較において「参照の同一性」を厳密に判定するため、値が同じでも別インスタンスのオブジェクトは等しくないと評価されます。用途に応じて===と使い分けることで、より安全なコードを書くことができます。

  1. JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説

    オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars

  2. JavaScriptの緩い等価(==)演算子とは?仕組みと使い方を解説

    JavaScriptにおける「緩い等価(Loose Equality)」を表す演算子が「==」(抽象的等価演算子)です。この演算子を使うと、比較対象となるオペランド同士の値がまず共通の型へ自動的に変換され、その上で等しいかどうかが判定されます。 そのため、型が異なる値同士であっても比較が成立します。例えば、数値の 1 と文字列の 1 を比較すると、文字列側が数値へ変換されて true となります。また、undefined == null も特別なルールによって true と評価されます。 一方で、暗黙的な型変換によって意図しない結果を招く可能性があるため、実務ではより厳密な比較を行う「===