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
как одинаковые значения.
Пожалуйста, обратитесь к следующей таблице сравнения равенства для справки: -