MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Object.is() メソッドは 2 つの値の同一性を判定します。

構文

Object.is(value1, value2)

引数

value1
比較する 1 つ目の値。
value2
比較する 2 つ目の値。

戻り値

2 つの値が同一かどうかを表す Boolean 型の値。

説明

Object.is() は 2 つの値が同一かどうかを判定します。2 つの値は以下の規則の一つに当てはまる場合同一となります :

  • どちらも undefined
  • どちらも null
  • どちらも true かどちらも false
  • どちらも同じ文字からなる同じ長さの文字列
  • どちらも同じオブジェクト
  • どちらも数で、
    • どちらも +0
    • どちらも -0
    • どちらも NaN
    • あるいはどちらも非ゼロで NaN でなく、同じ数値を持つ

このメソッドは等値演算子 (==) による等値比較とおなじものではありません。等値演算子 (==) は等値性比較の前に(同じ型でなければ)両辺に対して様々な型強制を適用します(結果、例えば "" == falsetrue に評価されます)が、Object.is は両辺どちらの値にも型強制を行いません。

また同値演算子 (===) による等値比較とも同じものではありません。同値演算子 (===)(そして等値演算子 (==) も)数値 -0+0 は同じものとして扱い、 Number.NaNNaN は別物として扱います。

使用例

Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var test = { a: 1 };
Object.is(test, test);       // true

Object.is(null, null);       // true

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

ES6 非対応ブラウザ用のポリフィル

Object.is() は ECMA-262 標準に追加予定の機能です。そのためすべてのブラウザには搭載されていないかもしれません。スクリプトの最初に以下のコードを追加すればこの問題に対処できます。このコードにより Object.is() が標準搭載されていない場合でも利用できます。

if (!Object.is) {
  Object.is = function(x, y) {
    // 仕様書の SameValue アルゴリズムにしたがう
    if (x === y) { // ステップ 1 から 5、および 7 から 10
      // ステップ 6.b から 6.e までの場合: +0 != -0
      return x !== 0 || 1 / x === 1 / y;
    } else {
      // ステップ 6.a の場合: NaN == NaN
      return x !== x && y !== y;
    }
  };
}

仕様

仕様 策定状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Object.is の定義
標準 初期定義。
ECMAScript 2017 Draft (ECMA-262)
Object.is の定義
ドラフト  

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 30 22 (22) 未サポート (有) 9
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 未サポート ? 22.0 (22) 未サポート 未サポート 9

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama, x2357, teoli, ethertank
 最終更新者: YuichiNukiyama,