Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 972799 of Object.is()

  • リビジョンの URL スラグ: Web/JavaScript/Reference/Global_Objects/Object/is
  • リビジョンのタイトル: Object.is()
  • リビジョンの ID: 972799
  • 作成日:
  • 作成者: x2357
  • 現行リビジョン? いいえ
  • コメント 翻訳更新

このリビジョンの内容

{{JSRef}} {{harmony}}

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

構文

Object.is(value1, value2)

引数

value1
value2
これら 2 つの値を比較します。

戻り値

2 つの値が同一かどうかを表す {{jsxref("Boolean")}} 型の値。

説明

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

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

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

また同値演算子 ({{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}) による等値比較とも同じものではありません。同値演算子 ({{jsxref("Operators/Comparison_Operators", "===", "#Identity")}})(そして等値演算子 ({{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}) も)数値 -0+0 は同じものとして扱い、 {{jsxref("Number.NaN")}} と {{jsxref("NaN")}} は別物として扱います。

使用例

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;
    }
  };
}

仕様

仕様 策定状況 コメント
{{SpecName('ES6', '#sec-object.is', 'Object.is')}} {{Spec2('ES6')}} 初期定義。

ブラウザ実装状況

{{CompatibilityTable}}
機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート {{CompatChrome("30")}} {{CompatGeckoDesktop("22")}} {{CompatNo}} {{CompatVersionUnknown}} {{CompatNo}}
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート {{CompatNo}} {{CompatUnknown}} {{CompatGeckoMobile("22")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}

関連情報

このリビジョンのソースコード

<div>{{JSRef}} {{harmony}}</div>

<p><code><strong>Object.is()</strong></code> メソッドは 2 つの値の<a href="/ja/docs/Web/JavaScript/Equality_comparisons_and_when_to_use_them">同一性</a>を判定します。</p>

<h2 id="Syntax" name="Syntax">構文</h2>

<pre class="syntaxbox">
Object.is(<var>value1</var>, <var>value2</var>)</pre>

<h3 id="Parameters" name="Parameters">引数</h3>

<dl>
 <dt><code>value1</code></dt>
 <dt><code>value2</code></dt>
 <dd>これら 2 つの値を比較します。</dd>
</dl>

<h3 id="Return_value" name="Return_value">戻り値</h3>

<p>2 つの値が同一かどうかを表す {{jsxref("Boolean")}} 型の値。</p>

<h2 id="Description" name="Description">説明</h2>

<p><code>Object.is()</code> は 2 つの値が<a href="/ja/docs/Web/JavaScript/Equality_comparisons_and_when_to_use_them">同一かどうか</a>を判定します。2 つの値は以下の規則の一つに当てはまる場合同一となります :</p>

<ul>
 <li>どちらも {{jsxref("undefined")}}</li>
 <li>どちらも {{jsxref("null")}}</li>
 <li>どちらも <code>true</code> かどちらも <code>false</code></li>
 <li>どちらも同じ文字からなる同じ長さの文字列</li>
 <li>どちらも同じオブジェクト</li>
 <li>どちらも数で、
  <ul>
   <li>どちらも <code>+0</code></li>
   <li>どちらも <code>-0</code></li>
   <li>どちらも {{jsxref("NaN")}}</li>
   <li>あるいはどちらも非ゼロで {{jsxref("NaN")}} でなく、同じ数値を持つ</li>
  </ul>
 </li>
</ul>

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

<p>また同値演算子 ({{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}) による等値比較とも同じものでは<strong>ありません</strong>。同値演算子 ({{jsxref("Operators/Comparison_Operators", "===", "#Identity")}})(そして等値演算子 ({{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}) も)数値 <code>-0</code> と <code>+0</code> は同じものとして扱い、 {{jsxref("Number.NaN")}} と {{jsxref("NaN")}} は別物として扱います。</p>

<h2 id="Examples" name="Examples">使用例</h2>

<pre class="brush: js">
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
</pre>

<h2 id="Polyfill_for_non-ES6_browsers">ES6 非対応ブラウザ用のポリフィル</h2>

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

<pre class="brush: js">
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 &amp;&amp; y !== y;
    }
  };
}
</pre>

<h2 id="Specifications" name="Specifications">仕様</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">仕様</th>
   <th scope="col">策定状況</th>
   <th scope="col">コメント</th>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-object.is', 'Object.is')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td>初期定義。</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2>

<div>{{CompatibilityTable}}</div>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>機能</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>基本サポート</td>
   <td>{{CompatChrome("30")}}</td>
   <td>{{CompatGeckoDesktop("22")}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatNo}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>機能</th>
   <th>Android</th>
   <th>Chrome for Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>基本サポート</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatUnknown}}</td>
   <td>{{CompatGeckoMobile("22")}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
   <td>{{CompatNo}}</td>
  </tr>
 </tbody>
</table>
</div>

<h2 id="See_also" name="See_also">関連情報</h2>

<ul>
 <li><a href="/ja/docs/Web/JavaScript/Equality_comparisons_and_when_to_use_them">等値比較と同一性</a> — 標準搭載されている 3 つの同一性比較支援機能の比較</li>
</ul>
このリビジョンへ戻す