Equality
There are two kinds equality operators:
===: strict equality comparison using "triple equals"==: loose or abstract equality comparison using "double equals", which first uses type coercion to convert values to the same type, and then compares them
There's no built-in way to compare values for "structural equality" (e.g. comparing two arrays to see if they contain the same elements)
Strict equality
We should almost always use strict equality comparison with ===, since the behavior is more consistent.
Loose equality
Loose equality can be convenient, but is less consistent, so it's best to use === instead.
Structural equality
If we want to compare structural equality, we'll usually turn to a 3rd party library, such as lodash.isequal.
SameValueZero
Many built-in methods use the SameValueZero algorithm to test for equality, instead of == or ===. However, the differences are only relevant in edge cases, so it's generally safe to think of this as === equality.