2013-08-29 13 views

Odpowiedz

15

Na konsoli przeglądarki, gdy nie jest poprzedzony = (lub jakiś inny kod, który zmienia jego kontekst), {} jest traktowany jako bloku, a nie obiektu dosłownym.

Ponieważ blok jest pusty, nie robi nic, pozostawiając + [].

Operator jednoargumentowy plus konwertuje tablicę na liczbę, która jest 0.

+1

Rzeczywiście, spróbuj '({} + []) '. Nie wiedziałem, że mogę użyć '{}' bez 'if/else/do/while/function/etc'. – biziclop

1

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().

Powiązane problemy