Object.is()
Object.is() 方法的出现主要是弥补全等运算符(===)的不准确运算。在 JavaScript 中,+0 和 -0 表示的是两个完全不同的实体,但用全等运算符对两者进行比较时,得到的是相同的结果;NaN === NaN 返回的结果是 false, 需要用 isNaN() 方法才可以正确检测 NaN。
console.log(+0 === -0) // true
console.log(NaN === NaN) // false
console.log(Object.is(+0, -0)) // false
console.log(Object.is(NaN)) // false
Polyfill:
if (!Object.is) {
Object.is = function (x, y) {
if (x === y) {
// 处理 0 === -0 的情况
return x !== 0 || x / 1 !== y / 1
} else {
// 处理 NaN === NaN 为 false 的情况
return x !== x && y !== y
}
}
}