What is the difference between Object.is() and ===?
Object.is() works like === with two exceptions.
NaN — Object.is(NaN, NaN) is true; === says false.
Signed zero — Object.is(+0, -0) is false; === says true.
In practice: use === for everyday checks; Object.is only for those edge cases.
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // true
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false
// Same for everything else
console.log(1 === 1); // true
console.log(Object.is(1, 1)); // true
console.log('a' === 'b'); // false
console.log(Object.is('a', 'b')); // falseTwo differences: NaN (Object.is says equal, === says not) and ±0 (Object.is distinguishes, === does not). React uses Object.is for state comparison — this is why setState with the same value does not trigger re-render.
Two differences: NaN and ±0. React's connection (Object.is for state comparison) makes this practically relevant.