Вебсправочник
Справочник JavaScript

Object.is(): сравнение NaN и знака нуля

Object.is сравнивает два значения без преобразования типов. Основные отличия от строгого равенства заметны для NaN и положительного или отрицательного нуля.

Назначение

Object.is сравнивает два значения без преобразования типов. Основные отличия от строгого равенства заметны для NaN и положительного или отрицательного нуля.

Как это работает

Для Object.is два NaN равны, а 0 и -0 различны. Объекты по-прежнему сравниваются по идентичности ссылки: одинаковые поля в двух отдельных объектах не делают их одним значением.

Пример

const item = {name: "CSS"};
console.assert(Object.is(NaN, NaN));
console.assert(!Object.is(0, -0));
console.assert(0 === -0);
console.assert(Object.is(item, item));
console.assert(!Object.is({name: "CSS"}, {name: "CSS"}));
console.assert(!Object.is(3, "3"));
console.log("Проверки сравнения пройдены");

Что должно получиться

Все утверждения проходят. Пример отделяет числовые пограничные случаи от сравнения ссылок и показывает, что строка "3" не превращается автоматически в число.

Граница применения и частая ошибка

Object.is не выполняет глубокое сравнение и не подходит как готовая проверка равенства документов JSON. Для прикладных данных сначала определите, какие поля и типы действительно значимы.

Самостоятельная проверка

Сравните одну переменную объекта, её обычное присваивание и копию через spread. Добавьте undefined и null в таблицу результатов. Для каждого случая запишите ожидаемый ответ до выполнения кода.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.