Warum gibt `Object.prototype.toString` immer` [object *] `zurück?

Wenn Sie anrufenObject.prototype.toString.call(anything) das ergebnis ist immer[object Something], woherSomething könnte eines von mehreren Dingen sein. Meine Frage ist, warum ist das "Objekt" dort Teil? Es scheint überflüssig, es immer dabei zu haben. Es sagt Ihnen nichts über das Argument, das übergeben wurde.

Object.prototype.toString.call(null);
=> [object Null]

Object.prototype.toString.call(undefined);
=> [object Undefined]

Schon seitnull undundefined sind keine Objekte (und scheitertCheckObjectCoercible), scheint der "Objekt" -Teil wirklich, wirklich bedeutungslos.

Ich muss glauben, dass ursprünglich ein Grund dafür bestand, dass der "Objekt" -Teil dort abgelegt wurde, auch wenn der Grund in der Zwischenzeit verloren gegangen ist und er jetzt nur noch aus historischen Gründen erhalten ist.

Kann jemand etwas Licht ins Dunkel bringen?

Klar, ich weiß schon wieObject.prototype.toString kann verwendet werden, um die zu bekommen[[Class]] (Typ) eines Objekts. Meine Frage betrifft den Grund für das Format des zurückgegebenen Strings - speziell den "Objekt" -Teil am Anfang. Ich möchte wissen, ob es jemals einen Grund für diesen Teil gab oder ob es einen möglichen zukünftigen Grund für diesen Teil gibt. Vielleicht könnte es in Zukunft etwas anderes als "Objekt" zurückgeben? Kann ich erwarten, dass es immer "object" zurückgibt? Wenn ja, warum gibt es es überhaupt zurück? Wer möchte, dass eine Funktion unabhängig von der Eingabe immer dasselbe zurückgibt?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage