We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Метод 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  

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

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support30 Yes22 No Yes9
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes22 Yes9 Yes

Див. також

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

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