JavaScript Object.is()

The Object.is() method checks if two values are the same.

Example

let obj1 = { a: 1 };

// comparing the object with itself
console.log(Object.is(obj1, obj1)); 

// Output: true

is() syntax

The syntax of the is() method is:

Object.is(value1, value2)

Here, is() is a static method. Hence, we need to access the method using the class name, Object.


is() Parameters

The is() method takes in:

  • value1 - the first value to compare.
  • value2 - the second value to compare.

is() Return Value

The is() method returns a Boolean value:

  • true - if the two arguments have the same value
  • false - if the two arguments don't have the same value

Conditions for Same Values

Two values are the same if one of the following holds:

  • both undefined
  • both null
  • both true or both false
  • both strings of the same length with the same characters in the same order
  • both the same object (means both objects have the same reference)
  • both numbers and
    • both +0
    • both -0
    • both NaN
    • or both non-zero and both not NaN and both have the same value

Example 1: Javascript Object.is()

// objects with same values
console.log(Object.is("JavaScript", "JavaScript")); 

// Output: true

// objects with different values
console.log(Object.is("JavaScript", "javascript")); 

// Output: false

// compare null values
console.log(Object.is(null, null));

// Output: true 

In the above example, we checked whether the two parameters that are passed to the is() method are same or not.


Example 2: is() With Custom Objects

// create an object
let obj1 = { a: 1 };

// create another object
// with identical properties as obj1
let obj2 = { a: 1 };

// returns true because both arguments
// have the same reference
console.log(Object.is(obj1, obj1));

// Output: true

// returns false because obj1 and
// obj2 have different references
console.log(Object.is(obj1, obj2));

// Output: false

In the above example, we used the is() method to check whether obj1 and obj2 have the same values.

In spite of sharing identical properties and values, we get false as an output because obj1 and obj2 have different references.

By contrast, comparing obj1 with itself gives us true because the reference is the same.


Example 3: is() With Special Cases

// Special Cases

console.log(Object.is([], []));  // false 

console.log(Object.is(0, -0));  // false

console.log(Object.is(-0, -0));  // true

console.log(Object.is(NaN, 0 / 0));  // true

The above examples help to test some quirky behaviors of JavaScript. They don't have to be memorized and are in fact grasped as we get familiar with the language.

Notes:

  1. The == operator applies various coercions to both sides (if not the same Type) before testing for equality while Object.is() does not.
  2. The === operator treats the number values -0 & +0 as equal and treats Number.NaN as not equal to NaN while Object.is() does the opposite.

Recommended Reading: