Mario Steinko: print_r() für js?

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

  1. 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

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. 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

      --
      _ - jenseits vom delirium - _

         Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
      1. 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

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
        1. 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

          --
          _ - jenseits vom delirium - _

             Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
  2. 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

  3. 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

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  4. 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

  5. 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

    --
    Am Ende wird alles gut.
    1. 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

      --
      »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
      Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
      ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
      1. 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

        --
        Am Ende wird alles gut.
        1. 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

        2. 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

          --
          »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
          Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
          ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]