Массив JavaScript для номера

Возможный дубликат:
Можете ли вы объяснить, почему ++ [[]] [+ []] + [+ []] = 10

Мне интересно что-то в течение нескольких дней... Я знаю, что унарный плюс в JavaScript сначала преобразует его в число. Я применяю + к пустому массиву и получаю следующий результат:

+[] == 0

Когда я это сделаю:

+[1] == 1

Но:

+[1,2] == NaN

Последние две вещи почти понятны, но почему пустой массив равен 0?! Связано ли это с:

[] == false

Несколько раз ECMAScript заставляет меня задаться вопросом...

alert([![]+[]][+[]][+[]]+[![]+[]][+[]][+!+[]]+[!+[]+[]][+![]][+![]]+[![]+[]][+[]][+!+[]]+[![]+[]][+[]][+!+[]+!+[]]+' '+(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);

С уважением!

Ответ 1

Строковая форма пустого Array представляет собой пустую строку:

> [].toString()
""

Унарный оператор + преобразуется в объекты Number, поэтому он преобразует пустую строку в 0:

> Number("")
0

Это объясняет, почему +[] == 0 истинно.