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

構文

Object.is(value1, value2);

引数

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

返値

Boolean で、 2 つの引数が同一の値であるかどうかを表します。

説明

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

ポリフィル

if (!Object.is) {
  Object.is = function(x, y) {
    // 同値アルゴリズム
    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 の定義
ドラフト  

ブラウザーの対応

機能ChromeEdgeFirefoxInternet ExplorerOperaSafari
基本対応30 あり22 なし あり9
機能Android webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
基本対応 あり あり あり22 あり9 あり

関連情報

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

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