JavaScript метод Object.is()

Определение и применение

JavaScript метод is() возвращает логическое значение, которое определяет являются ли два переданных значения одинаковыми. Если значения являются одинаковыми, то возвращаемое значение будет true, в противном случае false.

Переданные значения являются одинаковыми в следующих случаях:

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

Обращаю Ваше внимание, что метод is() не аналогичен использованию оператора ==. В отличие от метода is() оператор == перед проверкой на равенство использует приведение типов обоих операндов (если они имеют различный тип).

Например:

JavaScript
"" == false;                     // возвращаемое значение true
Object.is( "", false );    // возвращаемое значение false

Кроме того, метод is() не аналогичен использованию оператора ===. Например, оператор ===, как и оператор == считает числовые значения -0 и +0 равными, а значение NaN не равным самому себе:

JavaScript
-0 == +0;                     // возвращаемое значение true
-0 === +0;                   // возвращаемое значение true
Object.is( -0, +0 );    // возвращаемое значение false

NaN == NaN;                      // возвращаемое значение false
NaN === NaN;                    // возвращаемое значение false
Object.is( NaN, NaN );     // возвращаемое значение true

Это сравнение SameValue, а не глубокое сравнение: объекты равны только при совпадении ссылок, символы — при совпадении самого символа. Object.is(NaN, NaN) возвращает true, а Object.is(+0, -0) — false.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.is
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
is✓19✓12✓22✓15✓9✓25✓22✓14✓9✓1.5✓4.4✓9

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
// сравнение двух значений
Object.is( value1, value2 );

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

ECMAScript: Object.is()

Значения параметров

Object: справочные сведения
Параметр Описание
value1 Первое сравниваемое значение для проверки. Обязательное значение.
value2 Второе сравниваемое значение для проверки. Обязательное значение.

Два значения BigInt равны при одинаковом целом значении; 1n и 1 различаются. Два символа равны, только если это один и тот же Symbol.

Примеры, попробуйте сами

В примере «Ссылки, NaN и знаковый ноль» показан результат вызова метода.

Ссылки, NaN и знаковый ноль

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Ссылки, NaN и знаковый ноль</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
let obj = { a: 1 }, // инициализируем переменную содержащую объект
    a = obj,
    b = obj

console.log(Object.is(a, b)) // возвращаемое значение true
console.log(Object.is(undefined, undefined)) // возвращаемое значение true
console.log(Object.is(null, null)) // возвращаемое значение true
console.log(Object.is(true, true)) // возвращаемое значение true
console.log(Object.is('hello world', 'hello world')) // возвращаемое значение true
console.log(Object.is(777, 777)) // возвращаемое значение true
console.log(Object.is(+0, +0)) // возвращаемое значение true
console.log(Object.is(NaN, NaN)) // возвращаемое значение true
console.log(Object.is(NaN, 0 / 0)) // возвращаемое значение true

console.log(Object.is([], [])) // возвращаемое значение false
console.log(Object.is({}, {})) // возвращаемое значение false
console.log(Object.is('a', 'A')) // возвращаемое значение false
console.log(Object.is(true, false)) // возвращаемое значение false
console.log(Object.is(-0, +0)) // возвращаемое значение false