Object.is()

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.

Приклади

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

Поліфілл для браузерів без ES6 

Object.is() є запропонованим доповненням до стандарту ECMA-262; і як таке може бути присутнім не в усіх браузерах . Ви можете обійти цю проблему, використовуючи наступний код на початку ваших скриптів. Це дозволить вам використовувати 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 2017 Draft (ECMA-262)
The definition of 'Object.is' in that specification.
Draft  

Сумісність з браузерами

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базова підтримка 30 22 (22) No support (Yes) 9
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базова підтримка No support ? 22.0 (22) No support No support 9

Дивись також

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

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