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

Синтаксис

Object.is(value1, value2);

Параметри

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

Вертає

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

Опис

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

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

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

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

Приклади

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() є відсутнім, можна скористатись таким запасним варіантом:

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 AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support 30Edge Full support YesFirefox Full support 22IE No support NoOpera Full support YesSafari Full support 9WebView Android Full support YesChrome Android Full support YesEdge Mobile Full support YesFirefox 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

Див. також

Мітки документа й учасники

Зробили внесок у цю сторінку: asmforce, Sestri4kina
Востаннє оновлена: asmforce,