aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/global_objects/object/is/index.html
blob: 906dbf2dd309fb5b54efd5a5881f6822987eeb81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
---
title: Object.is()
slug: Web/JavaScript/Reference/Global_Objects/Object/is
tags:
  - Comparison
  - Condition
  - Conditional
  - ECMAScript 2015
  - Equality
  - JavaScript
  - Method
  - Object
translation_of: Web/JavaScript/Reference/Global_Objects/Object/is
---
<div>{{JSRef}}</div>

<p><strong><code>Object.is()</code></strong> メソッドは 2 つの値が<a href="/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness">同一値</a>であるかどうかを判定します。</p>

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

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

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

<dl>
 <dt><code><var>value1</var></code></dt>
 <dd>比較する 1 つ目の値。</dd>
 <dt><code><var>value2</var></code></dt>
 <dd>比較する 2 つ目の値。</dd>
</dl>

<h3 id="Return_value" name="Return_value">返値</h3>

<p>{{jsxref("Boolean")}} で、 2 つの引数が同一値であるかどうかを表します。</p>

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

<p><code>Object.is()</code> は 2 つの値が<a href="/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness">同一値</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><code>==</code> 演算子は等値性比較の前に (同じ型でなければ) 両辺に対して様々な型変換を適用します (結果、例えば <code>"" == false</code><code>true</code> に評価されます) が、<code>Object.is</code> は両辺どちらの値にも型変換を行いません。</p>

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

<h2 id="Examples" name="Examples"></h2>

<h3 id="Using_Object.is" name="Using_Object.is">Object.is の使用</h3>

<pre class="brush: js notranslate">Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

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" name="Polyfill">ポリフィル</h2>

<pre class="brush: js notranslate">if (!Object.is) {
  Object.defineProperty(Object, "is", {
    value: 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 &amp;&amp; y !== y;
      }
    }
  });
}</pre>

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

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">仕様書</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-object.is', 'Object.is')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>

<p>{{Compat("javascript.builtins.Object.is")}}</p>

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

<ul>
 <li><a href="/ja/docs/Web/JavaScript/Equality_comparisons_and_sameness">等値比較と同一性</a> — 標準搭載されている 3 つの同一性比較支援機能の比較</li>
</ul>