Object.is
console.log(Object.is(2, 2)); // true console.log(Object.is({}, {})); // false
Strict Equality: a === b
console.log(2 === 2); // true console.log({} === {}); // false
So what’s the difference between Object.is
and ===
?
In almost all the cases, they are the same.
But...
there are two rare cases where the behavior of ===
is different.
NaN === NaN
isfalse
, although they are the same value.-0 === 0
and0 === -0
aretrue
, although they are different values.
First Special Case: NaN
let width = 0 / 0; // NaN let height = width * 2; // NaN console.log(width === height); // false
Remember that NaN === NaN
is always false
However, NaN
is the same value as NaN
:
console.log(Object.is(width, height)); // true
The reason for NaN === NaN
being false
is largely historical, so I suggest accepting it as a fact of life. You might run into this if you try to write some code that checks a value for being NaN
(for example, to print a warning).
function resizeImage(size) { if (size === NaN) { // This will never get logged: the check is always false! console.log('Something is wrong.'); } // ... }
Second Special Case: -0
Both 0 === -0
and -0 === 0
are always true
:
let width = 0; // 0 let height = -width; // -0 console.log(width === height); // true
However, 0
is a different value from -0
:
console.log(Object.is(width, height)); // false
[From Just Javascript]