Przejdź do głównej zawartości

Zacznijmy od tego, że dwa znaki + + oddzielone od siebie spacją są interpretowane jako dwa osobne znaki (operatory).

Nie ma tu więc mowy o zadziałaniu operatora inkrementacji ++.

Znak + może działać jako jednoargumentowy operator, gdy występuje w sąsiedztwie tylko jednego operandu.

Jego działanie skutkuje wtedy konwersją wartości na wartość liczbową.

Przykładowo + true lub +true (białe znaki są tutaj ignorowane) zwróci wartość 1.

Kluczowe jest wystąpienie wyłącznie jednego operandu z prawej strony operatora +.

Gdyby pojawiły się dwa operandy np. true + true to operator + zadziała już jako operator dodawania (choć wcześniej nastąpi też konwersja wartości logicznych na wartości liczbowe).

Wystąpienie dwóch operatorów + + oznacza, że drugi z nich na pewno po swojej lewej stronie nie ma operandu, więc zadziała jako jednoargumentowy operator.

Jednoargumentowy operator + ma też pierwszeństwo wykonywania przed operatorem dodawania +.

Wracając do przykładów, pierwsze cztery będą operacjami dodawania.

Dodawanie nie oznacza jednak zawsze dodawania wartości liczbowych.

Gdy jeden z operandów jest ciągiem znaków, operator ten zachowuje się jako operator konkatenacji czyli łączenia ze sobą ciągów znaków.

Gdy dodawane są wartości nie prymitywne (obiekty), w pierwszej kolejności następuje zamiana na wartości prymitywne.

Tablice konwertowane są na ciągi znaków.

Jeśli są puste, to konwertowane są do pustych ciągów znaków "".

Dodanie do siebie dwóch pustych tablic [] to więc to samo co dodanie do siebie dwóch pustych ciągów znaków, co finalnie daje nam pusty ciąg znaków.

Puste obiekty, które nie są tablicami, skonwertowane do ciągu znaków, zwracają "[object Object]".

Na pierwszy rzut oka może to wyglądać jak tablica z dwoma wartościami object, Object.

W rzeczywistości jest to jednak ciąg znaków, który zawiera nawias kwadratowy.

Jeśli dodamy więc pustą tablicę i pusty obiekt, to operator + połączy ze sobą dwa ciągi znaków: "" oraz "[object Object]", co finalnie da nam ciąg znaków "[object Object]".

Dodanie do siebie dwóch pustych obiektów, da nam zdublowane\ "[object Object][object Object]".

Gdy do gry wkracza dodatkowo jednoargumentowy operator +, jego prawy operand konwertowany jest do wartości liczbowej.

Pusta tablica zwraca wartość 0. Pusty obiekt zwraca wartość NaN.

Finalnie zachodzi dodawanie (konkatenacja) tych wartości z ciągami znaków (pustej tablicy, albo pustego obiektu) razem z ciągiem znaków "0" lub "NaN".