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 не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.