コンテンツにスキップ

JavaScript/Object.is

出典: フリー教科書『ウィキブックス(Wikibooks)』

Object.is は JavaScript における厳密な等価性比較を行うメソッドです。このメソッドは、2 つの値が同一かどうかを比較します。=== 演算子と似ていますが、-0+0 を区別し、NaN を自身と等しいとみなす点で異なります。

構文

[編集]
Object.is(value1, value2)

引数

  • value1:比較する最初の値。
  • value2:比較する2番目の値。

戻り値

  • true:値が等しい場合。
  • false:値が異なる場合。

使用例

[編集]

以下は Object.is の動作例です。

// 通常の等価性
console.log(Object.is(25, 25)); // true
console.log(Object.is('foo', 'foo')); // true
console.log(Object.is({}, {})); // false (異なるオブジェクト)

// 特殊なケース
console.log(Object.is(0, -0)); // false
console.log(Object.is(-0, -0)); // true
console.log(Object.is(NaN, NaN)); // true

特徴

[編集]
  1. === との違い
    • Object.is は、-0+0 を区別します。
    • Object.is は、NaN を自身と等しいとみなします。
    // === の場合
    console.log(0 === -0); // true
    console.log(NaN === NaN); // false
    
    // Object.is の場合
    console.log(Object.is(0, -0)); // false
    console.log(Object.is(NaN, NaN)); // true
    
  2. オブジェクトの比較
    • オブジェクトでは、同じ参照を持つ場合のみ true を返します。
    const obj = {};
    console.log(Object.is(obj, obj)); // true
    console.log(Object.is({}, {})); // false
    

主な用途

[編集]

Object.is は、通常の等価性比較では不十分な場合に使用されます。例えば:

  • -00 を区別する必要がある場合。
  • NaN を比較する必要がある場合。

注意点

[編集]
  • Object.is は浅い比較を行い、オブジェクトの内部プロパティは比較しません。
  • 一般的な用途では === で十分な場合が多いですが、特殊なケースで役立ちます。

Polyfill

[編集]

Object.is は ES6 (ECMAScript 2015) で導入されました。古い環境で動作させるためには、以下のような Polyfill を利用できます。

if (!Object.is) {
  Object.is = function(x, y) {
    if (x === y) {
      // -0 と +0 の区別
      return x !== 0 || 1 / x === 1 / y;
    }
    // NaN の等価性
    return x !== x && y !== y;
  };
}

仕様

[編集]

Object.is は ECMAScript 2015 (ES6) で初めて導入され、すべての主要なブラウザおよび JavaScript 実行環境でサポートされています。

ブラウザサポート

[編集]
ブラウザ サポート
Chrome 30+
Firefox 22+
Safari 9+
Edge 12+
Internet Explorer 非対応

関連項目

[編集]