JavaScript/Object.is
表示
Object.is
は JavaScript における厳密な等価性比較を行うメソッドです。このメソッドは、2 つの値が同一かどうかを比較します。===
演算子と似ていますが、-0
と +0
を区別し、NaN
を自身と等しいとみなす点で異なります。
構文
[編集]Object.is(value1, value2)
引数
value1
:比較する最初の値。value2
:比較する2番目の値。
戻り値
true
:値が等しい場合。false
:値が異なる場合。
使用例
[編集]以下は Object.is
の動作例です。
// 通常の等価性 console.log(Object.is(25, 25)); // true console.log(Object.is('foo', 'foo')); // true console.log(Object.is({}, {})); // false (異なるオブジェクト) // 特殊なケース console.log(Object.is(0, -0)); // false console.log(Object.is(-0, -0)); // true console.log(Object.is(NaN, NaN)); // true
特徴
[編集]===
との違いObject.is
は、-0
と+0
を区別します。Object.is
は、NaN
を自身と等しいとみなします。
// === の場合 console.log(0 === -0); // true console.log(NaN === NaN); // false // Object.is の場合 console.log(Object.is(0, -0)); // false console.log(Object.is(NaN, NaN)); // true
- オブジェクトの比較
- オブジェクトでは、同じ参照を持つ場合のみ
true
を返します。
const obj = {}; console.log(Object.is(obj, obj)); // true console.log(Object.is({}, {})); // false
- オブジェクトでは、同じ参照を持つ場合のみ
主な用途
[編集]Object.is
は、通常の等価性比較では不十分な場合に使用されます。例えば:
-0
と0
を区別する必要がある場合。NaN
を比較する必要がある場合。
注意点
[編集]Object.is
は浅い比較を行い、オブジェクトの内部プロパティは比較しません。- 一般的な用途では
===
で十分な場合が多いですが、特殊なケースで役立ちます。
Polyfill
[編集]Object.is
は ES6 (ECMAScript 2015) で導入されました。古い環境で動作させるためには、以下のような Polyfill を利用できます。
if (!Object.is) { Object.is = function(x, y) { if (x === y) { // -0 と +0 の区別 return x !== 0 || 1 / x === 1 / y; } // NaN の等価性 return x !== x && y !== y; }; }
仕様
[編集]Object.is
は ECMAScript 2015 (ES6) で初めて導入され、すべての主要なブラウザおよび JavaScript 実行環境でサポートされています。
ブラウザサポート
[編集]ブラウザ | サポート |
---|---|
Chrome | 30+ |
Firefox | 22+ |
Safari | 9+ |
Edge | 12+ |
非対応 |