[Javascript] Object.is() vs ===

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.

  1. NaN === NaN is false, although they are the same value.
  2. -0 === 0 and 0 === -0 are true, 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]

 

posted @ 2021-08-19 15:20  Zhentiw  阅读(40)  评论(0编辑  收藏  举报