JavaScript to ciekawy język. Choć nie wiem, czy słowo "ciekawy" w tym przypadku ma znaczenie pozytywne, czy negatywne. Oto przykład:

Ile wynosi suma dwóch pustych tablic [] + [] ? W miarę proste, wynosi "", pusty ciąg znaków. OK, ma to jakiś sen. Czy tą samą logikę można zastosować od obiektów? Teoretycznie nic nie stoi na przeszkodzie, więc śmiało wklepujemy w konsolę {} + {}. I co? Niespodzianka, zamiast pustego stringa NaN.

Rozbijmy to na czynniki. Ile wynosi {}? undefined. Więc undefined + undefined powinno równać się NaN. Sukces! Prawda. Ta sama logika powinna więc stosować się do tablic i pusta tablica powinna się nam zrzutować na pusty ciąg. W końcu już udowodniliśmy, że [] + [] = "". Tyle, że nie. [] = []. Koniec i kropka.

Robi się ciekawie. Idziemy dalej. Suma pustej tablicy i pustego obiektu [] + {}. Chwila napięcia i oto wynik: "[object Object]". A w drugą stronę? W podstawówce uczyli, że dodawanie jest przemienne. Widać JS do podstawówki nie chodził i {} + [] = 0.

Disclaimer: tak, to wszystko ma sens jak się nad tym głębiej zastanowić, poczytać i tak dalej. Lecz jeśli ktoś kiedyś Wam powie, że JavaScript jest prostym językiem programowania, to proszę, Oto piękny dowód, że chyba nie do końca.