Warum [object object] erwähnt "Objekt" zweimal?
[object object] ist der Standard-string-Darstellung eines JavaScript-Objekts.
Ich würde verstehen, wenn es nur [Object]
oder [object]
, aber warum [object Object]
? Warum das erste Wort ist klein und die zweite ist in Großbuchstaben? Ist es Teil von JSON oder JavaScript?
- Wenn diese Methode nicht überschrieben, in einem benutzerdefinierten Objekt, toString() gibt "[object type]", wobei Typ der Typ des Objektes. (ref)
- Aus dem gleichen Grund, dass
[object RegExp]
oder[object Array]
hatobject
es: denn es ist einobject
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle Objekte haben einen
toString
Methode zeigt, dass etwas im format[object type]
, wobei Typ der Typ des Objektes.Beim Aufruf
null
erhalten Sie[object Null]
und wenn man auf ein Objekt erhalten Sie die string -[object Object]
weil es auf der Grundlage der Objekt-Konstruktor (Großbuchstabe "O"), das ist, warum es sagtobject
zweimal, es ist ein Objekt der Typ Objekt.MDN
JSON ist ein lightweight data-interchange format, und nicht wirklich etwas zu tun haben mit JavaScript anders als sein namens "JavaScript Object Notation" denn es ist geschrieben wie ein JavaScript-Objekt.
toString
- Methode, der einzige Weg, Sie würden nicht ist, wenn Sie explizit überschreiben Sie es mit etwas anderem (und technisch würden Sie noch), und das ist nicht wirklich relevant. Das zweite Wort ist der Typ des Objekts, auch verwiesen auf als eine Klasse, und es hat nicht wirklich etwas zu tun mit primitiven ?Object.create(null)
, die kein Eigentum hat. Und über das 2. Wort: wennObject.prototype.toString
genannt wird, auf einem primitiven es wird in seiner Art; wenn Sie die für ein Objekt aufgerufen, wird es es der [[Klasse]] (z.B. Object, Array, Date), nicht den Typ (immer Objekt). Nur Erbsenzählerei 🙂Object.create(null)
ist ein sehr spezieller Fall, es ist die einzige Möglichkeit, um etwas, das aussieht wie ein Objekt, dass Erben nicht von überall aus und hat damit keine Eigenschaften.Object.prototype.toString
ist wohl noch spezieller, als es ist ein Prototyp der Objekt-Konstruktor nicht aufgerufen werden kann, auf irgendetwas, sondern ein Objekt, es sei denn, Sie gehen aus dem Weg und tunObject.prototype.toString.call
auf einem primitiven, und man würde Sie wohl noch bekommen[object String]
etc. Diese sind so weit hergeholt Grenzfälle, die auch MDN hat beschlossen, Sie zu verlassen aus.Weil es ein Objekt erstellt aus dem Basis -
Object
Klasse.Vom die Skillung:
Es absolut nichts zu tun hat mit JSON.
Den ersten
object
zeigt, dass die Art der Sache, die protokolliert wird, ist ein Objekt. Es ist auch hart codiert in der Sprache Spezifikation hier.Zweiten
Object
bezeichnet die constructor-Eigenschaft, zum Beispiel:Den Algorithmus sagt nur: "Holen Sie sich das [[class]] - Eigenschaft des Objekts und dann wieder '[object ' + class + ']'.
Haben Sie im Grunde traf der platonischen Wand Ende der Höhle. Wenn alles ein Objekt ist, was ist die Obermenge von für ein Objekt? Hier, die Antwort ist verkörpert in den code, es ist einfach Objekt.
Daher alle Objekte sind Objekte.
Willkommen in der zirkularität.