print_r() für js?
Mario Steinko
- javascript
Hi!
Gibts eine JS Funktion die das gleiche ausgibt macht, wie print_r()?
(angewendet auf ein object, am besten mit einer ausgabe aller alert() verwendbar)
lg
Mario
Moin Moin!
Gibts eine JS Funktion die das gleiche ausgibt macht, wie print_r()?
Vielleicht, wenn Du verrätst, was print_r() machen soll.
Alexander
Hallo Alexander!
Vielleicht, wenn Du verrätst, was print_r() machen soll.
print_r()...
Erzeugt irgendwie so was ähnliches, so ich es richtig verstanden habe, wie Dumper() in Perl (Data::Dumper). Wobei mir der Unterschied zw. print_r und var_dump als PHP-Laie nicht erschließt...
Viele Grüße aus Frankfurt/Main,
Patrick
Moin Moin!
print_r()...
Neee, völlig klar, sowas print_r() zu nennen.
Erzeugt irgendwie so was ähnliches, so ich es richtig verstanden habe, wie Dumper() in Perl (Data::Dumper). Wobei mir der Unterschied zw. print_r und var_dump als PHP-Laie nicht erschließt...
PHP.net sagt:
print_r(), var_dump() and var_export() will also show protected and private properties of objects with PHP 5. Static class members will not be shown.
mixed print_r ( mixed $expression [, bool $return= false ] )
void var_dump ( mixed $expression [, mixed $expression [, $... ]] )
Lustigerweise gibt es dann auch noch var_export() ...
mixed var_export ( mixed $expression [, bool $return= false ] )
... das analog D::D gültigen Code erzeugen soll, während die anderen Funktionen nur dem verzweifelten Nutzer irgendetwas Wirres hinrotzen, natürlich pro Funktion in einem eigenen Format. Oder auch nicht:
Prior to PHP 4.0.4, print_r() will continue forever if given an array or object that contains a direct or indirect reference to itself. An example is print_r($GLOBALS) because $GLOBALS is itself a global variable that contains a reference to itself.
Und var_export() erzeugt gelegentlich auch Müll:
var_export() does not handle circular references as it would be close to impossible to generate parsable PHP code for that. If you want to do something with the full representation of an array or object, use serialize().
Da stehen dann lustige Dinge wie
When serializing an object, methods are not lost anymore. Please see the Serializing Objects for more information.
und
It is not possible to serialize PHP built-in objects.
Und spätestens das ist der Punkt, wo bei mir langsam die Schmerzen einsetzen und ich ganz schnell alles aus der Hand lege bzw. vom Schirm entferne, was mit PHP zu tun hat.
Alexander
Hallo Alexander!
Danke für's Nachschauen und Erläutern!
Und spätestens das ist der Punkt, wo bei mir langsam die Schmerzen einsetzen und ich ganz schnell alles aus der Hand lege bzw. vom Schirm entferne, was mit PHP zu tun hat.
;)
Leider muss ich mich derzeit etwas (aber nur das nötige Minimum) damit beschäftigen - bei der Pflege einer Website, welche auf einem Webspace ohne Perl und SSI gehostet wird...
Viele Grüße aus Frankfurt/Main,
Patrick
Gibts eine JS Funktion die das gleiche ausgibt macht, wie print_r()?
(angewendet auf ein object, am besten mit einer ausgabe aller alert() verwendbar)
in firebug gibt es sowas, in gecko browsern könntest du sonst auch toSource benutzen
Moin Moin!
Eine einfache Suche nach print_r javascript liefert zur Zeit ca 95.600 Ergebnisse, das Problem ist also bekannt und schon der erste(!) Suchtreffer bietet eine Lösung, genau wie die beiden folgenden. Und ich kann mir beim besten Willen nicht vorstellen, das die restlichen 94.597 Ergebnisse nur noch Quengel-Threads sind, in denen irgendwelche Faulpelze Code geschrieben haben wollen.
Alexander
Gibts eine JS Funktion die das gleiche ausgibt macht, wie print_r()?
Jein. Das rekursive Durchlaufen und Serialisieren eines JavaScript-Objektes ist nicht so trivial. Und in der Regel ist die Ausgabe nicht hilfreich (was hat man von [object HTMLInputElement] oder dergleichen).
Was willst du genau erreichen?
(angewendet auf ein object, am besten mit einer ausgabe aller alert() verwendbar)
JavaScript-Debuggng funktioniert mit Firebug sehr gut. Schau dir mal die Konsolen-API an. Da kannst du ein Objekt z.B. mit console.log ausgeben und das Objekt dann interaktiv durchsuchen. Das ist viel besser als die Umwandlung großer Datenstrukturen in Strings.
Andere Browser haben änhliches (IE 8, Opera, Safari/Chrome).
Mathias
Hi,
Gibts eine JS Funktion die das gleiche ausgibt macht, wie print_r()?
Nicht direkt, aber zum dumpen geht auch das: Firefox kennt obj.toSource(), damit wird ein Object zum json string und kann per alert ausgegeben werden.
Gruesse, Joachim
hallo again Joachim.
Mensch, Herr Wendenburg, Du gehst doch sonst bei erklaerungen nicht
so schluffig mit der sprache um.
ich lese aber in abwandlung nun schon zum wiederholten mal von Dir ...
... kennt obj.toSource(), damit wird ein Object zum json string ...
nein. [toSource] bildet objekte keineswegs als JSON-kompatible
strings ab - selbst dann nicht, wenn objekte zufaellig nur aus
durch JSON zugelassenen typen aufgebaut sein sollten.
JSON - »JavaScript Object Notation« - steht fuer eine speziell
in umfang und schreibweise reglementierte untermenge aller in
JavaScript-Objektliteralnotation moeglichen abbildungen.
abgesehen davon, dass [toSource]
nur in geckos implementiert ist,
stellt diese methode auch keinen wirklich verlaesslichen ersatz
fuer eine [dump]
-methode dar.
eine wirklich verlaessliche [dump]
-signatur eines JavaScript-objekts
zu erhalten ist nicht trivial, was wiederum der hohen dynamic dieser
sprache und nochzumal in einer browser-umgebung dem mix aus objekten
des DOM und des JavaScript-Sprachkerns geschuldet ist.
links:
»[Object].equals, [Object].dump, [Object].clone« vom 17. 03. 2008
»[Object].equals, [Object].dump, [Object].clone« vom 14. 11. 2006
so long - peterS. - pseliger@gmx.net
Hi,
ich lese aber in abwandlung nun schon zum wiederholten mal von Dir ...
»» ... kennt obj.toSource(), damit wird ein Object zum json string ...
das glaube ich kaum, habe ich doch grade erst durch Deine Posting zum Thema "Object in Json" umwandeln von dieser Gecko-Methode erfahren.
stellt diese methode auch keinen wirklich verlaesslichen ersatz
fuer eine [dump][/code]-methode dar.
nein, aber: "You can call toSource while debugging to examine the contents of an object." (Zitat https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/toSource (Dein eigener Link).
eine wirklich verlaessliche
[dump]
-signatur eines JavaScript-objekts zu erhalten ist nicht trivial
Hat keiner behauptet. Aber für die schnelle Ausgabe einen überschaubaren Datencontainer langt toSource allemale.
Gruesse, Joachim
für die schnelle Ausgabe einen überschaubaren Datencontainer langt toSource allemale.
Ja. Macht dann Sinn, wenn man weiß, dass es ein (eigener) Datencontainer ist bzw. ein eigenes Objekt. elementobjekt.toSource() oder dieMeistenHostObjekte.toSource() liefern z.B. "{}", wenig hilfreich. Beim Debugging würde meine Wahl daher auf die Firebug-Konsole fallen bzw. eine Ausgabefunktion, die je nach Typ intelligent vorgeht und mir das sagt, was ich wissen will - auch nicht bloß möglichst alle Member serialisieren.
Mathias
gruss Joachim
»» ich lese aber in abwandlung nun schon zum wiederholten mal von Dir ...
»» »» ... kennt obj.toSource(), damit wird ein Object zum json string ...
das glaube ich kaum, habe ich doch grade erst durch Deine Posting zum
Thema "Object in Json" umwandeln von dieser Gecko-Methode erfahren.
ich meine ja auch nicht Deine von mir oben teilzitierte konkrete aussage,
dass [toSource] zu einem »... json-string ...« fuehrte, sondern ich kritisiere
die wiederholt variierte aber falsche gleichsetzung von literalschreibweise
und JSON-format.
siehe eben auch den gerade von Dir angesprochenen und archivierten thread:
»object in json-string umwandeln«
so long - peterS. - pseliger@gmx.net