Object.is()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑенÑÑбÑÑ 2015 г..
Сводка
ÐеÑод Object.is() опÑеделÑеÑ, ÑвлÑÑÑÑÑ Ð»Ð¸ два знаÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми знаÑениÑми.
СинÑакÑиÑ
var isSame = Object.is(value1, value2);
ÐаÑамеÑÑÑ
ÐпиÑание
ÐеÑод Object.is() опÑеделÑеÑ, ÑвлÑÑÑÑÑ Ð»Ð¸ два знаÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми знаÑениÑми. Ðва знаÑÐµÐ½Ð¸Ñ ÑвлÑÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми в ÑледÑÑÑиÑ
ÑлÑÑаÑÑ
:
- оба ÑавнÑ
undefined - оба ÑавнÑ
null - оба ÑавнÑ
true, либо оба ÑавнÑfalse - оба ÑвлÑÑÑÑÑ ÑÑÑоками Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ длиной и одинаковÑми Ñимволами
- оба ÑвлÑÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же обÑекÑом
- оба ÑвлÑÑÑÑÑ ÑиÑлами и
Ðоведение ÑÑого меÑода не аналогиÑно опеÑаÑоÑÑ ==. ÐпеÑаÑÐ¾Ñ == иÑполÑзÑÐµÑ Ð¿Ñиведение Ñипов обоиÑ
опеÑандов (еÑли они имеÑÑ ÑазлиÑнÑй Ñип) пеÑед пÑовеÑкой на ÑавенÑÑво (в ÑезÑлÑÑаÑе полÑÑаеÑÑÑ, ÑÑо пÑовеÑка "" == false даÑÑ true), а меÑод Object.is пÑиведение Ñипов не вÑполнÑеÑ.
Ðоведение ÑÑого меÑода не аналогиÑно опеÑаÑоÑÑ ===. ÐпеÑаÑÐ¾Ñ === (Ñакже как и опеÑаÑÐ¾Ñ ==) ÑÑиÑÐ°ÐµÑ ÑиÑловÑе знаÑÐµÐ½Ð¸Ñ -0 и +0 ÑавнÑми, а знаÑение Number.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
ÐолиÑил
ÐеÑод Object.is пÑедложен в дополнение к ÑÑандаÑÑÑ ECMA-262; поÑÑÐ¾Ð¼Ñ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпен в некоÑоÑÑÑ
бÑаÑзеÑаÑ
. ÐÑо можно обойÑи, вÑÑавив пÑиведÑннÑй ниже ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð° в наÑало ваÑиÑ
ÑкÑипÑов. Ðн Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°Ð¼ иÑполÑзоваÑÑ Ð¼ÐµÑод Object.is в ÑлÑÑаÑÑ
, когда он не Ð¸Ð¼ÐµÐµÑ Ñодной поддеÑжки бÑаÑзеÑом.
if (!Object.is) {
Object.is = function(x, y) {
// SameValue algorithm
if (x === y) { // Steps 1-5, 7-10
// Steps 6.b-6.e: +0 != -0
return x !== 0 || 1 / x === 1 / y;
} else {
// Step 6.a: NaN == NaN
return x !== x && y !== y;
}
};
}
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-object.is > |
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
СмоÑÑиÑе Ñакже
- Ð ÑководÑÑво по JavaScript: одинаковоÑÑÑ â ÑÑавнение вÑÐµÑ ÑÑÑÑ Ð²ÑÑÑоеннÑÑ ÑпоÑобов пÑовеÑки на одинаковоÑÑÑ