Perché 2 == in JavaScript?

Recentemente ho scoperto che 2 == [2] in JavaScript. A quanto pare, questa stranezza ha un paio di conseguenze interessanti:

 var a = [0, 1, 2, 3]; a[[2]] === a[2]; // this is true 

Allo stesso modo, i seguenti lavori:

 var a = { "abc" : 1 }; a[["abc"]] === a["abc"]; // this is also true 

Ancora più strano, anche questo funziona:

 [[[[[[[2]]]]]]] == 2; // this is true too! WTF? 

Questi comportamenti sembrano coerenti su tutti i browser.

Qualche idea sul perché questa è una caratteristica del linguaggio?

Qui ci sono conseguenze più insane di questa “caratteristica”:

 [0] == false // true if ([0]) { /* executes */ } // [0] is both true and false! var a = [0]; a == a // true a == !a // also true, WTF? 

Questi esempi sono stati trovati da jimbojw http://jimbojw.com fama così come walkingeyerobot .