没有Object.is的时候存在的问题
NaN === NaN // false
+0 === -0 // true
Object.is 是如何解决这个问题的呢 ?
function is(a, b) {
// 判断0的情况
if (a === b) {
/*
前提:-0 === 0 // true, +0 === 0 // true
1 / -0 === -Infinity 1 / +0 === Infinity
*/
return a !== 0 || b !== 0 || 1 / a === 1 / b;
} else
return a !== a && b !== b; // 说明是 NaN
}
Object.is 出现本质上是为代码打补😂