Hiprup

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')); // false

Two 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.

What is the difference between Object.is() and ===? | Hiprup