We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

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 Latest Draft (ECMA-262)
Object.is の定義
ドラフト  

ブラウザ実装状況

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 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,