So , I came across the below while reading through You Don't Know JS: Up & Going
(thanks @P1xt).
You should take special note of the == and === comparison rules if you’re comparing two non-primitive values, like objects (including function and array). Because those values are actually held by reference, both == and === comparisons will simply check whether the references match, not anything about the underlying values.
For example, arrays are by default coerced to strings by simply joining all the values with commas (,) in between. You might think that two arrays with the same contents would be == equal, but they’re not:
var a = [1,2,3];
var b = [1,2,3];
var c = "1,2,3";
a == c; // true
b == c; // true
a == b; // false
I’m struggling to understand why a == b is false here? I think it’s because it’s comparing the actual ‘a’ and ‘b’ but not the contents of the array but how can a == c and b == c be true then?