Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Object.is()

この記事は技術レビューを必要としています。ぜひご協力ください

この記事は編集レビューを必要としています。ぜひご協力ください

これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。

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

構文

Object.is(value1, value2)

引数

value1
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)
The definition of 'Object.is' in that specification.
Standard 初期定義。

ブラウザ実装状況

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

関連情報

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

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