JavaScript provides two equality operators used for comparisons:
==
), also known as the loose equality
operator
===
), 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([
== str, // 0 == 0, true
num == bool, // 0 == 0, true
num == obj, // '0' == '0', true
str == num, // 0 == 0, true
obj == str, // 0 == 0, true
bool == obj, // 0 == 0, true
bool == nil, // false
bool == nil, // true
undef == bool, // false
undef ;
])
console.dir([
=== str, // types don't match, false
num === bool, // types don't match, false
num === obj, // types don't match, false
str === num, // types don't match, false
obj === str, // types don't match, false
bool === obj, // types don't match, false
bool === nil, // types don't match, false
bool === nil, // types don't match, false
undef === bool, // types don't match, false
undef ; ])
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.