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 && 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>
|