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 の定義
ドラフト  

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 30Edge 完全対応 ありFirefox 完全対応 22IE 未対応 なしOpera 完全対応 ありSafari 完全対応 9WebView Android 完全対応 ありChrome Android 完全対応 ありEdge Mobile 完全対応 ありFirefox Android 完全対応 22Opera Android 完全対応 ありSafari iOS 完全対応 9Samsung Internet Android 完全対応 ありnodejs 完全対応 0.10

凡例

完全対応  
完全対応
未対応  
未対応

関連情報

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

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