Dlaczego `Object.prototype.toString` zawsze zwraca` [obiekt *] `?
Jeśli zadzwoniszObject.prototype.toString.call(anything)
wynik jest zawsze[object Something]
, gdzieSomething
może być jedną z kilku rzeczy. Moje pytanie brzmi: dlaczego jest tam „przedmiot”? Wydaje się, że zbędne jest zawsze mieć go tam. Nie mówi nic na temat argumentu, który został przekazany.
Object.prototype.toString.call(null);
=> [object Null]
Object.prototype.toString.call(undefined);
=> [object Undefined]
Odnull
iundefined
nie są obiektami (i nie udaje sięCheckObjectCoercible
), część „obiektowa” naprawdę wydaje się bez znaczenia.
Muszę myśleć, że pierwotnie istniał jakiś powód, dla którego część „obiektowa” została tam umieszczona, nawet jeśli powód został utracony w tamtym czasie, a teraz jest właśnie zachowany z powodów historycznych.
Czy ktoś może rzucić na to trochę światła?
Żeby było jasne, już wiem jakObject.prototype.toString
można użyć, aby uzyskać[[Class]]
(typ) obiektu. Moje pytanie dotyczy przyczyny formatu zwróconego ciągu - szczególnie części „obiektowej” na początku. Chcę wiedzieć, czy kiedykolwiek istniał jakiś powód dla tej części lub czy istnieje możliwy przyszły powód tej części. Może w przyszłości może zwrócić coś innego niż „obiekt”? Czy mogę oczekiwać, że zawsze zwróci „obiekt”? Jeśli tak, to dlaczego to wraca? Kto chce, aby funkcja zawsze zwracała to samo, bez względu na to, jakie jest wejście?