Help us test MDN's new front-end: https://discourse.mozilla.org/t/help-us-test-mdns-new-react-front-end-beta/42593

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Сводка

Метод Object.is() определяет, являются ли два значения одинаковыми значениями.

Синтаксис

var isSame = Object.is(value1, value2);

Параметры

value1
Первое сравниваемое значение.
value2
Второе сравниваемое значение.

Описание

Метод Object.is() определяет, являются ли два значения одинаковыми значениями. Два значения являются одинаковыми в следующих случаях:

  • оба равны undefined
  • оба равны null
  • оба равны true, либо оба равны false
  • оба являются строками с одинаковой длиной и одинаковыми символами
  • оба являются одним и тем же объектом
  • оба являются числами и
    • оба равны +0
    • оба равны -0
    • оба равны NaN
    • либо оба не равны нулю или NaN и оба имеют одинаковое значение

Поведение этого метода не аналогично оператору ==. Оператор == использует приведение типов обоих операндов (если они имеют различный тип) перед проверкой на равенство (в результате получается, что проверка "" == 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;
    }
  };
}

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

Спецификация Статус Комментарии
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Object.is' в этой спецификации.
Стандарт Изначальное определение.
ECMAScript Latest Draft (ECMA-262)
Определение 'Object.is' в этой спецификации.
Черновик  

Совместимость с браузерами

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidEdge MobileFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
isChrome Полная поддержка 30Edge Полная поддержка 12Firefox Полная поддержка 22IE Нет поддержки НетOpera Полная поддержка ДаSafari Полная поддержка 9WebView Android Полная поддержка ДаChrome Android Полная поддержка ДаEdge Mobile Полная поддержка ДаFirefox Android Полная поддержка 22Opera Android Полная поддержка ДаSafari iOS Полная поддержка 9Samsung Internet Android Полная поддержка Даnodejs Полная поддержка 0.10

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки

Смотрите также

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

Внесли вклад в эту страницу: mdnwebdocs-bot, YozhEzhi, SphinxKnight, Mingun, teoli, Romanzes, franza
Обновлялась последний раз: mdnwebdocs-bot,