[Javascript] Object.is() vs ===
阿新 • • 發佈:2021-08-19
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 betweenObject.is
and===
?
In almost all the cases, they are the same.
But...
there aretwo rare caseswhere the behavior of===
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 thatNaN === NaN
is alwaysfalse
However,NaN
is thesame value
NaN
:
console.log(Object.is(width, height)); // true
The reason forNaN === NaN
beingfalse
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 beingNaN
(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
Both0 === -0
and-0 === 0
are alwaystrue
:
let width = 0; // 0 let height = -width; // -0 console.log(width === height); // true
However,0
is adifferent valuefrom-0
:
console.log(Object.is(width, height)); // false
[From Just Javascript]