Perché non è uguale a se stesso in Javascript?

Oggi stavo giocando con gli array in Javascript e ho notato questo piccolo gioiello:

alert([1, 2, 3] == [1, 2, 3]); //alerts false 

Mi sembra piuttosto strano che l’array non sia uguale a se stesso.

Ma poi ho notato questo, che era ancora più strano:

 alert([1, 2, 3] == "1,2,3"); //alerts true 

?!?!?!? !!!?

Perché nel mondo è [1, 2, 3] non == a se stesso ma è == alla stringa?

Mi rendo conto che == non è lo stesso di === . Anche così, quale malvagità potrebbe causare Mr. Javascript fare cose così strane?