См. Спецификацию :
Абстрактная операция внутреннего сравнения SameValueZero (x, y), где x и y - значения языка ECMAScript, выдает true или false.Такое сравнение выполняется следующим образом:
- Если тип (x) отличается от типа (y), вернуть false.
Если тип (x) равен Number,затем
Если x равен NaN, а y равен NaN, вернуть true.
Если x равен +0 и y равно -0, вернуть true.
Если x равен -0, а y равен +0, верните true.
Если x такое же числовое значение, что и y, вернитеtrue.
Return false.
Return SameValueNonNumber (x, y).
По сути, это то же самое, что и тест ===
, за исключением того, что когда x
и y
равны NaN
, они также проходят тест.Вы можете реализовать это так:
const sameValueZero = (x, y) => x === y || (Number.isNaN(x) && Number.isNaN(y));
console.log(sameValueZero(0, 0));
console.log(sameValueZero(0, 1));
console.log(sameValueZero(0, NaN));
console.log(sameValueZero(NaN, NaN));