没有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 出现本质上是为代码打补😂