Wenn ich console.log()
ein Objekt in meinem JavaScript-Programm habe, sehe ich nur die Ausgabe [object Object]
, was nicht sehr hilfreich ist, um herauszufinden, um welches Objekt (oder sogar welchen Objekttyp) es sich handelt.
In C # bin ich es gewohnt, zu überschreiben ToString()
, um die Debugger-Darstellung eines Objekts anpassen zu können. Gibt es etwas Ähnliches, das ich in JavaScript tun kann?
javascript
debugging
tostring
devios1
quelle
quelle
typeof
).Antworten:
Sie können auch
toString
in Javascript überschreiben . Siehe Beispiel:In dieser Diskussion erfahren Sie, wie Sie den Objekttypnamen in JavaScript bestimmen.
quelle
toString
Eigenschaft überschreibt , undObject.prototype.toString.call(f)
wird weiterhin angezeigt[object Object]
.Erste Überschreibung
toString
für Ihr Objekt oder den Prototyp:Konvertieren Sie dann in eine Zeichenfolge, um die Zeichenfolgendarstellung des Objekts anzuzeigen:
Wenn Ihnen die zusätzliche Eingabe nicht gefällt, können Sie eine Funktion erstellen, die Zeichenfolgendarstellungen ihrer Argumente in der Konsole protokolliert:
Verwendung:
Aktualisieren
E2015 bietet eine viel schönere Syntax für dieses Zeug, aber Sie müssen einen Transpiler wie Babel verwenden :
quelle
Eine einfache Möglichkeit, eine debuggbare Ausgabe in Browser JS zu erhalten, besteht darin, das Objekt einfach in JSON zu serialisieren. So könnten Sie einen Anruf tätigen wie
So zum Beispiel
alert("Blah! " + JSON.stringify({key: "value"}));
erzeugt eine Benachrichtigung mit dem TextBlah! {"key":"value"}
quelle
Wenn Sie Node verwenden, ist dies möglicherweise eine Überlegung wert
util.inspect
.Dies ergibt:
Während die Version ohne Inspektion druckt:
quelle
Überschreiben Sie einfach die
toString()
Methode.Einfaches Beispiel:
Es ist sogar noch besser, wenn Sie einen neuen Typ definieren:
quelle
v0.10.*
oder ChromeVersion 32.0.1700.102
. Während der direkte Aufruf von toString (lame) oder die Verwendung von Type Coercion (lamer) damit funktioniert, verwendet die Konsole [/ info | log /] den alten Pre-Mod toString.Wenn das Objekt von Ihnen selbst definiert wurde, können Sie jederzeit eine toString-Überschreibung hinzufügen.
quelle
Mit Vorlagenliteralen :
quelle
Fügen Sie dem benutzerdefinierten Objekt oder der benutzerdefinierten Klasse die Eigenschaft 'Symbol.toStringTag' hinzu .
Der ihm zugewiesene Zeichenfolgenwert ist die Standardzeichenfolgenbeschreibung, da die
Object.prototype.toString()
Methode intern auf sie zugreift.Beispielsweise:
Code-Snippet anzeigen
Für einige Javascript-Typen wie Maps und Promises ist ein integriertes
toStringTag
Symbol definiertDa
Symbol.toStringTag
es sich um ein bekanntes Symbol handelt , können wir darauf verweisen und überprüfen, ob die oben genannten Typen die Eigenschaft Symbol.toStringTag haben.quelle
toString()
direkten Überschreiben der einzige Weg, um dies zu erreichenfunction MyObj() {} Object.prototype.toString.call(new MyObj()) // "[object MyObj]"
?Mit dem Chrome-Konsolenprotokoll können Sie das Objekt überprüfen.
quelle
console.log("this is my object:", obj)
.-Dieser Vorgang nimmt viel Zeit in Anspruch und wird laut Mozilla-Dokumenten nicht empfohlen: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/proto
- Offensichtlich veralten moderne Browser .prototype und ECMA6 spezifiziert stattdessen die Verwendung von Proper__proto__.
Wenn Sie beispielsweise Ihre eigene Objekt- Geoposition definieren , sollten Sie die Eigenschaft __proto__ anstelle von .prototype aufrufen :
quelle
Hier ist ein Beispiel zum Stringifizieren eines Map-Objekts:
quelle
Sie können allen benutzerdefinierten Objekten ihre eigenen toString-Methoden zuweisen oder eine allgemeine Methode schreiben, die Sie für das Objekt aufrufen können, das Sie betrachten.
quelle
toString()
Wenn Sie die Prototype JavaScript Library einschließen , können SieObject.inspect()
eine viel nützlichere Darstellung erhalten, anstatt sie zu überschreiben .Die beliebtesten Frameworks enthalten etwas Ähnliches.
quelle
Sie können in JS erweitern oder überschreiben
quelle
quelle