What is the difference between JavaScript's equality operators?

JavaScript, Type, Comparison · Jun 12, 2021

JavaScript provides two equality operators used for comparisons:

  • The double equals (==), also known as the loose equality operator
  • The triple equals (===), also known as the strict equality operator

The key difference between the two is that the triple equals (===) operator compares both type and value, whereas the double equals (==) operator uses type coercion so that both operands are of the same type, then compares only the resulting values.

Here are some examples to clear up any confusion:

const num = 0;
const str = '0';
const obj = new String(0);
const bool = false;
const undef = undefined;
const nil = null;

console.dir([
  num == str,     // 0 == 0, true
  num == bool,    // 0 == 0, true
  str == obj,     // '0' == '0', true
  obj == num,     // 0 == 0, true
  bool == str,    // 0 == 0, true
  bool == obj,    // 0 == 0, true
  bool == nil,    // false
  undef == nil,   // true
  undef == bool,  // false
]);

console.dir([
  num === str,     // types don't match, false
  num === bool,    // types don't match, false
  str === obj,     // types don't match, false
  obj === num,     // types don't match, false
  bool === str,    // types don't match, false
  bool === obj,    // types don't match, false
  bool === nil,    // types don't match, false
  undef === nil,   // types don't match, false
  undef === bool,  // types don't match, false
]);

As you can see from the examples above, using the triple equals (===) operator is far more predictable and intuitive than the double equals (==) operator. Therefore, we recommend you use the triple equals (===) operator for most cases, unless you are entirely certain you want type coercion to be applied to the comparison's operands.

Written by Angelos Chalaris

I'm Angelos Chalaris, a JavaScript software engineer, based in Athens, Greece. The best snippets from my coding adventures are published here to help others learn to code.

If you want to keep in touch, follow me on GitHub.

More like this