1. 程式人生 > 其它 >[Javascript] Object.is() vs ===

[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 betweenObject.isand===?

In almost all the cases, they are the same.

But...

there aretwo rare caseswhere the behavior of===

is different.

  1. NaN === NaNisfalse, although they are the same value.
  2. -0 === 0and0 === -0aretrue, 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 === NaNis alwaysfalse

However,NaNis thesame value

asNaN:

console.log(Object.is(width, height)); // true

The reason forNaN === NaNbeingfalseis 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 === -0and-0 === 0are alwaystrue:

let width = 0; // 0
let height = -width; // -0
console.log(width === height); // true

However,0is adifferent valuefrom-0:

console.log(Object.is(width, height)); // false

[From Just Javascript]