Object.is() против ===

Метод Object.is() определяет, являются ли два значения одним и тем же значением. Object.is() ведет себя как оператор ===, за исключением того, что он ведет себя с нулями со знаком и NaN.

Object.is() лучше и точнее, чем ===strict оператор равенства. Object.is() полезен в сценариях, включающих работу с NaN и нулями со знаком.

Поведение оператора строгого равенства (===) с NaN

let amountA = NaN;
let amountB = NaN;
console.log(amountA === amountB); 
// Output
false

Строгое равенство считает NaN и NaN разными значениями. Вот почему он возвращает false.

Поведение Object.is() с NaN

let amountA = NaN;
let amountB = NaN;
console.log(Object.is(amountA, amountB)); 
// Output
true

Object.is() рассматривает NaN и NaN как одно и то же значение. Вот почему он возвращает true.

Поведение оператора строгого равенства (===) с нулями со знаком

console.log(-0 === 0);     =>     true
console.log(+0 === -0);    =>     true
console.log(+0 === 0);     =>     true

Оператор строгого равенства === обрабатывает +0 , -0 и 0 как одинаковые значения.

Поведение Object.is() с нулями со знаком

console.log(Object.is(-0 , 0));      =>     false
console.log(Object.is(+0 , -0));     =>     false
console.log(Object.is(+0 , 0));      =>     true

Но метод Object.is() обрабатывает +0 и -0 как разные значения. Но он обрабатывает +0 и 0 как одинаковые значения.

Пожалуйста, обратитесь к следующей таблице сравнения равенства для справки: -