Podczas używania operatora wobec obiektów, interpreter javascript powinien rzutować wartości na prymitywne za pomocą metody valueOf, która w rzeczywistości wykorzystuje wewnętrzny odrzut przekazywania funkcji ToPrymitive do wewnętrznej metody obiektu [[DefaultValue]].
Twój przykład z operatorem plus jest nieco skomplikowany, ponieważ operator może działać zarówno jako dodawanie matematyki, jak i łączenie ciągów. W tym przypadku łączy on ciągi reprezentacji obiektów.
Co naprawdę dzieje się za sceną jest:
a = {}.valueOf().toString() + [].valueOf().toString();
Ponieważ tablica jest pusta metoda toString zwraca pusty ciąg, dlatego prawidłowy wynik powinien być [object Object], która jest zwracana wartość od object.valueOf() toString().
Gdzie jest porównanie? –
Przepraszam, byłem zbyt szybki. – bfavaretto
Wat? https://www.destroyallsoftware.com/talks/wat –