Object.is()
Object.is() - это метод, который сравнивает два значения и возвращает true, если они считаются одним и тем же значением.
console.log(Object.is(10, 10));
console.log(Object.is('10', 10));
Результат:
true
false
Первое сравнение вернуло true, потому что значения одинаковые. Во втором случае строка ‘10’ и число 10 - это разные значения.
Что такое Object.is()
Object.is() похож на строгое сравнение ===. Метод не преобразует типы и не пытается сделать строку числом.
console.log(Object.is('JavaScript', 'JavaScript'));
console.log(Object.is(true, 1));
console.log(Object.is(null, undefined));
Результат:
true
false
false
Если типы или значения отличаются, метод возвращает false.
Синтаксис
Общая запись выглядит так:
Object.is(value1, value2);
value1 и value2 - значения, которые нужно сравнить.
let result = Object.is(5, 5);
console.log(result);
Результат:
true
Сравнение с ===
В большинстве обычных случаев Object.is() и === дают одинаковый результат.
console.log(Object.is(7, 7));
console.log(7 === 7);
console.log(Object.is('7', 7));
console.log('7' === 7);
Результат:
true
true
false
false
Главные отличия связаны с двумя случаями: NaN и нулем со знаком.
Сравнение NaN
Обычное сравнение считает, что NaN не равен даже самому себе.
console.log(NaN === NaN);
console.log(Object.is(NaN, NaN));
Результат:
false
true
Object.is() в этом месте ведет себя понятнее: если оба значения NaN, метод возвращает true.
Сравнение +0 и -0
В JavaScript есть обычный ноль 0 и отрицательный ноль -0. В большинстве задач между ними нет разницы.
console.log(0 === -0);
console.log(Object.is(0, -0));
Результат:
true
false
Строгое сравнение считает эти значения равными, а Object.is() различает их. На первых уроках такая проверка нужна редко, но важно знать, почему результат может отличаться от ===.
Сравнение объектов
Несмотря на название, Object.is() не сравнивает содержимое объектов. Он проверяет, ссылаются ли переменные на один и тот же объект.
let user = { name: 'Jack' };
let admin = user;
let guest = { name: 'Jack' };
console.log(Object.is(user, admin));
console.log(Object.is(user, guest));
Результат:
true
false
user и admin ссылаются на один объект, поэтому результат true. guest - это другой объект, даже если внутри такие же свойства.
Итого
Object.is() сравнивает два значения без преобразования типов. В обычных случаях он похож на ===, но отличается при сравнении NaN, 0 и -0.
Object.is(value1, value2);
Метод полезен, когда нужно сравнить значения строго и при этом корректно обработать NaN.