Object.is()

Метод Object.is() з'ясовує, чи мають два аргументи однакове значення.

Синтаксис

Object.is(value1, value2);

Параметри

value1
Перше значення для порівняння.
value2
Друге значення для порівняння.

Вертає

Булеве значення, що вказує, чи мають вказані аргументи однакове значення.

Опис

Object.is() визначає, чи мають вказані аргументи однакове значення. Два значення вважаються однаковими за однієї з наступних умов:

  • обидва undefined;
  • обидва null;
  • обидва true або обидва false;
  • обидва є рядками однакової довжини з однаковими символами у однаковому порядку;
  • обидва є тим самим об'єктом (тобто, обидва мають те саме посилання);
  • обидва є числами та
    • обидва +0;
    • обидва -0;
    • обидва NaN;
    • або обидва ненульові та не NaN, і мають однакові значення.

Це не те саме, що й рівність відповідно до оператора ==. Оператор == здійснює приведення типів обох операндів (якщо вони належать до різних типів даних) перед перевіркою на рівність (в результаті такий вираз як "" == false має значення true), натомість, метод Object.is не перетворює жодне значення.

Це також не те саме, що й рівність відповідно до оператора ===. Оператор === (так само, як оператор ==) вважає рівними числові значення -0 та +0, а значення Number.NaN не вважає рівним до NaN.

Приклади

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

Запасний варіант (поліфіл)

if (!Object.is) {
  Object.is = function(x, y) {
    // Алгоритм SameValue 
    if (x === y) { // Steps 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;
    }
  };
}

Специфікації

Специфікація Статус Коментар
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.is' in that specification.
Standard Первинне визначення.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.is' in that specification.
Draft

Підтримка веб-переглядачами

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
isChrome Full support 30Edge Full support 12Firefox Full support 22IE No support NoOpera Full support YesSafari Full support 9WebView Android Full support YesChrome Android Full support 30Firefox Android Full support 22Opera Android Full support YesSafari iOS Full support 9Samsung Internet Android Full support Yesnodejs Full support 0.10

Legend

Full support  
Full support
No support  
No support

Див. також