Wie kann ich ein JavaScript-Objekt anzeigen?


1616

Wie zeige ich den Inhalt eines JavaScript-Objekts in einem Zeichenfolgenformat an, wie wir es tun? alert eine Variable sind?

Auf die gleiche formatierte Weise möchte ich ein Objekt anzeigen.


7
Würden Sie bitte Ihre Frage umformulieren? Was meinst du mit "formatierter Weg"? Wie in, mit reichhaltiger Formatierung, wie fett / kursiv / etc?
Sasha Chedygov

Gibt es eine Möglichkeit, den Laufzeitwert einer Variablen anzuzeigen, indem der Wert der Variablen mit einigen Konsolenbefehlen gedruckt wird?
BlackPanther

1
@ BlackPanther Mach es einfach console.log("", yourObject1, yourObject2, yourObject3, etc...);. Eine kürzere Version ist einfach zu tun console.log(yourObject1, yourObject2, etc...);.
Tom_mai78101

2
Können Sie bitte eine bessere Antwort auswählen, die den Konsens der Community genauer widerspiegelt?
HoldOffHunger

Soconsole.log('a string', aNumber, anObject)
onmyway133

Antworten:


1068

Wenn Sie das Objekt zu Debugging-Zwecken drucken möchten, verwenden Sie den folgenden Code:

var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}}
console.log(obj)

wird angezeigt:

Screenshot Konsole Chrom

Hinweis: Sie dürfen nur das Objekt protokollieren. Dies funktioniert beispielsweise nicht:

console.log('My object : ' + obj)

Hinweis ' : Sie können in der logMethode auch ein Komma verwenden. Die erste Zeile der Ausgabe ist die Zeichenfolge, und danach wird das Objekt gerendert:

console.log('My object: ', obj);

43
Diese Funktion funktioniert auch in Google Chrome, wenn Sie die JavaScript-Konsole verwenden (Umschalt + Strg + J oder Umschalt + Strg + I, je nach Chrome-Version). Beachten Sie auch, dass dies auch console.log(obj1, obj2)sehr gut funktioniert, sodass Sie nicht console.log()jedes Objekt aufrufen müssen, wenn Sie mehrere Variablen protokollieren. Denken Sie auch immer daran, alle derartigen Aufrufe in der Produktion zu entfernen, da dadurch Browser beschädigt werden, die sie nicht implementieren (z. B. Internet Explorer).
Felix

102
Ja, es wird [Objektobjekt] gedruckt, aber daneben befindet sich eine kleine Schaltfläche zum Erweitern, mit der Sie den Inhalt des Objekts überprüfen können.
Hughes

12
@hughes es kann eigentlich beides. Ich habe ein Objekt, das ich erstellt habe mit: var obj = {"foo": false}; und ein anderes Objekt, das von einem Server an einen Rückruf übergeben wird, das durch den Rückruf übergeben wird, wird mit dem kleinen Pfeil gedruckt, damit Sie es öffnen können. Das statisch erstellte Objekt druckt nur [Objektobjekt] ohne Pfeil. Ich versuche das auch herauszufinden, irgendwelche anderen Gedanken?
Benstraw

124
console.log("id:"+obj);wird nicht korrekt ausgegeben, da es einen String ausgibt, wie Sie ihn dort sehen. Sie müssen ihn wie console.log("id:"); console.log(obj);
folgt

14
Versuchen Sie console.log(JSON.stringify(obj))oderconsole.dir(obj)
Robot Boy

2011

Verwenden Sie die native JSON.stringifyMethode. Funktioniert mit verschachtelten Objekten und alle gängigen Browser unterstützen diese Methode.

str = JSON.stringify(obj);
str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output.
console.log(str); // Logs output to dev tools console.
alert(str); // Displays output using window.alert()

Link zur Mozilla API-Referenz und anderen Beispielen.

obj = JSON.parse(str); // Reverses above operation (Just in case if needed.)

Verwenden Sie einen benutzerdefinierten JSON.stringify-Ersatz, wenn dieser Javascript-Fehler auftritt

"Uncaught TypeError: Converting circular structure to JSON"

326
Für eine besser lesbare Ausgabe versuchen Sie JSON.stringify (obj, null, 4). Dies wird es als ordentlich eingerückten Text ausschreiben
Ben Clayton

2
JSON.stringify kann nur eine kleine Teilmenge von Javascript-Werten anzeigen und löst eine Ausnahme für den Rest aus - console.log hat dieses Problem nicht.
Erinnern Sie sich an Monica

11
Wenn Sie ein Neuling wie ich sind, vergessen Sie nicht, console.logdhconsole.log(JSON.stringify(obj,null, 4));
nilesh

2
"Nicht erfasster TypeError: Konvertieren einer kreisförmigen Struktur in JSON", wenn ob = window.
Michael

1
Ich hatte Fälle, in denen es nicht funktionierte: Es zeigte sich {}für ein nicht leeres Objekt. Fragen Sie daher unbedingt nach, console.log(obj)bevor Sie glauben, dass Ihr Objekt bei der strigify()Rückgabe leer ist {}.
Sindarus

394
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);

1
Genau das will ich. Ich verwende Google Maps v3 und der DirectionRender gibt ein Objekt zurück. Das hat vier Elemente und in diesem ändert sich der Name eines Objekts ständig, also müssen wir das finden. Dafür hat diese Methode wirklich geholfen. Außerdem können wir auf diese Weise alle Namen der Eigenschaften und Objekte erhalten. Oder gibt es eine andere Möglichkeit, die Namen der Objekte und Eigenschaften zu finden?
Jayapal Chandran

34
+1, nicht alles Javascript wird in Browsern ausgeführt oder kann in diesen debuggt werden.
Bill Yang

3
Wahrscheinlich möchten Sie die eingebaute Cruft die meiste Zeit mit hasOwnProperty ausblenden.
John

9
Omg - 0: [; 1: o; 2: b; 3: j; 4: e; 5: c; 6: t; 7 :; 8: O; 9: b; 10: j; 11: e; 12: c; 13: t; 14:];
JSideris

1
Ein bisschen spät, dies zu finden, aber da es letztes Jahr an meinem Geburtstag (29. August) angefordert wurde, ist hier eine funktionierende Geige. jsfiddle.net/MrMarlow/fq53o6o9
MrMarlow

124

console.dir(object)::

Zeigt eine interaktive Liste der Eigenschaften eines angegebenen JavaScript-Objekts an. In dieser Liste können Sie Offenlegungsdreiecke verwenden, um den Inhalt von untergeordneten Objekten zu untersuchen.

Beachten Sie, dass die console.dir()Funktion nicht dem Standard entspricht. Siehe MDN-Webdokumente


1
Ja, dies ist eine gute Lösung, funktioniert jedoch nur wie erwartet, wenn Sie nur das Objekt protokollieren möchten (z. B. console.dir (obj)). Wenn Sie einen Stich mit der Ausgabe verketten möchten, erhalten Sie [Objekt Objekt].
Zoman

Ein großer Vorteil von console.dirist, dass Sie die Werte in Ihrer Konsole noch erweitern und lesen können, nachdem die Variable durch Müll gesammelt wurde. Dies wird in einem anderen SO-Artikel hier beschrieben
Dawson B

Ein weiterer Vorteil console.dirist, dass beim Speichern der Konsole in einer Datei alle Eigenschaften wie erwartet in der Datei gespeichert sind. Das passiert nicht, wenn nur console.log verwendet wird.
Kepi

79

Versuche dies :

console.log(JSON.stringify(obj))

Dadurch wird die Stringify-Version des Objekts gedruckt. Anstelle [object]einer Ausgabe erhalten Sie also den Inhalt des Objekts.


7
typeerror: Converting circular structure to JSON?
Kaiden Prince

@KaidenPrince Diese Antwort finden Sie für Ihren Fehler: stackoverflow.com/questions/4816099/… Es handelt sich wahrscheinlich um ein DOM-Element in Ihrem Objekt. Wenn dies der Fall ist, versuchen Sie am besten, sich einfach in Chrome oder Firefox an der Konsole anzumelden und dort zu überprüfen. Andernfalls müssten Sie alle kreisförmigen Elemente entfernen, bevor JSON.stringify aufgerufen wird, damit es funktioniert.
Ace Hyzer

Die Lösung besteht darin, einfach in zwei separate Befehle aufzuteilen, ob Sie es glauben oder nicht: console.log ("id:"); console.log (obj);
Collin Chaffin

66

Nun, Firefox (danke an @Bojangles für detaillierte Informationen) hat eine Object.toSource()Methode, die Objekte als JSON und drucktfunction(){} .

Das reicht für die meisten Debugging-Zwecke, denke ich.


6
Object.toSource () scheint für Chrome nicht zu funktionieren. Wird dies erwartet? Oder fällt Chrome nicht unter "erweiterte Browser"? =)
Stil

44
Alter Thread, habe ihn gerade über Google gefunden. .toSource()ist eigentlich nur Firefox . Ich dachte nur, ich würde es dich wissen lassen.
Bojangles

52

Wenn Sie Alert verwenden möchten, um Ihr Objekt zu drucken, können Sie Folgendes tun:

alert("myObject is " + myObject.toSource());

Es sollte jede Eigenschaft und ihren entsprechenden Wert im Zeichenfolgenformat drucken.


18
toSource () funktioniert nicht in Nicht-Gecko-Browsern (z. B. Chrome, Safari)
Yarin

37

Wenn Sie Daten in Tabellenform anzeigen möchten, können Sie diese verwenden

console.table(obj);

Tabelle kann sortiert werden, wenn Sie auf die Tabellenspalte klicken.

Sie können auch auswählen, welche Spalten angezeigt werden sollen:

console.table(obj, ['firstName', 'lastName']);

Weitere Informationen zu console.table finden Sie hier


34

In NodeJS können Sie ein Objekt mit drucken util.inspect(obj). Geben Sie unbedingt die Tiefe an, da sonst nur ein flacher Ausdruck des Objekts angezeigt wird.


33

Funktion:

var print = function(o){
    var str='';

    for(var p in o){
        if(typeof o[p] == 'string'){
            str+= p + ': ' + o[p]+'; </br>';
        }else{
            str+= p + ': { </br>' + print(o[p]) + '}';
        }
    }

    return str;
}

Verwendungszweck:

var myObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

$('body').append( print(myObject) );

Beispiel:

http://jsfiddle.net/WilsonPage/6eqMn/



@jsh du solltest das if-else umdrehen und nach Objekt anstatt nur nach Zeichenfolge suchen. aktualisierte Geige: jsfiddle.net/6eqMn/594
Michael Walter

1
@ Wilsonpage Dies schlägt fehl, wenn ich der Eigenschaft tel einen ganzzahligen Wert hinzufüge :(
ni3

26

Einfach benutzen

JSON.stringify(obj)

Beispiel

var args_string = JSON.stringify(obj);
console.log(args_string);

Oder

alert(args_string);

Beachten Sie auch, dass Funktionen in Javascript als Objekte betrachtet werden.

Als zusätzliche Anmerkung:

Tatsächlich können Sie eine neue Eigenschaft wie diese zuweisen und auf console.log zugreifen oder sie in einer Warnung anzeigen

foo.moo = "stackoverflow";
console.log(foo.moo);
alert(foo.moo);

1
Die Frage selbst lautet: "Wie wenn wir eine Variable 'alarmieren'", das ist also keine wirkliche Antwort. Und auch Ihre andere Option "JSON.stringify (obj)" wurde bereits in "27. November 2010" erwähnt. Sie überladen diese Frage nur mit Duplikaten und Nichtantworten. Auch in diesem Zusammenhang ist es sinnlos, neue Eigenschaften zuzuweisen.
Paul


18

Wie gesagt, der beste und einfachste Weg, den ich gefunden habe, war

var getPrintObject=function(object)
{
    return JSON.stringify(object);
}

Dies ist die einfachste und schnellste Lösung, funktioniert jedoch nicht bei großen Objekten wie z navigator.
Someguy234


16

NB: In diesen Beispielen definiert yourObj das Objekt, das Sie untersuchen möchten.

Zunächst einmal meine am wenigsten bevorzugte und am häufigsten verwendete Art, ein Objekt anzuzeigen:

Dies ist die defakte Methode, um den Inhalt eines Objekts anzuzeigen

console.log(yourObj)

wird so etwas produzieren wie: Geben Sie hier die Bildbeschreibung ein

Ich denke, die beste Lösung besteht darin, durch die Objektschlüssel und dann durch die Objektwerte zu schauen, wenn Sie wirklich sehen möchten, was das Objekt enthält ...

console.log(Object.keys(yourObj));
console.log(Object.values(yourObj));

Es wird ungefähr Folgendes ausgegeben: Geben Sie hier die Bildbeschreibung ein (oben abgebildet: die im Objekt gespeicherten Schlüssel / Werte)

Es gibt auch diese neue Option, wenn Sie ECMAScript 2016 oder neuer verwenden:

Object.keys(yourObj).forEach(e => console.log(`key=${e}  value=${yourObj[e]}`));

Dies führt zu einer ordentlichen Ausgabe: Geben Sie hier die Bildbeschreibung ein Die in einer früheren Antwort erwähnte Lösung: console.log(yourObj)Zeigt zu viele Parameter an und ist nicht die benutzerfreundlichste Art, die gewünschten Daten anzuzeigen . Aus diesem Grund empfehle ich, Schlüssel und Werte dann separat zu protokollieren.

Next Up :

console.table(yourObj)

Jemand in einem früheren Kommentar schlug diesen vor, aber er hat bei mir nie funktioniert. Wenn es für jemand anderen in einem anderen Browser oder so funktioniert, dann ein dickes Lob! Ich werde den Code immer noch hier als Referenz einfügen! Gibt so etwas an die Konsole aus: Geben Sie hier die Bildbeschreibung ein


Würden Sie das Beispiel um Object und obj erweitern?
historystamp

Ich bin mir nicht sicher, ob ich den Kommentar verstehe, aber ich habe unterschiedliche Namen für Objekte hinzugefügt, die einen Namen haben sollten. Objekt war nicht explizit genug.
Max Alexander Hanna

console.table(yourObj) arbeitete für mich in Google Chrome Version 77.0.3865.90 (Official Build) (64-Bit). Danke für das Teilen!
Devner

15

(Dies wurde meiner Bibliothek bei GitHub hinzugefügt. )

Das Rad hier neu erfinden! Keine dieser Lösungen hat für meine Situation funktioniert. Also habe ich schnell die Antwort von wilsonpage überarbeitet . Dieser dient nicht zum Drucken auf dem Bildschirm (über die Konsole, das Textfeld oder was auch immer). In solchen Situationen funktioniert es einwandfrei und funktioniert einwandfrei, wie vom OP angefordert, z alert. Viele Antworten hier beziehen sich nicht auf die Verwendung alertals OP angefordert. Auf jeden Fall ist es jedoch für den Datentransport formatiert. Diese Version scheint ein sehr ähnliches Ergebnis zu liefern wie toSource(). Ich habe nicht gegen getestet JSON.stringify, aber ich gehe davon aus, dass dies ungefähr das Gleiche ist. Diese Version ähnelt eher einer Polydatei, sodass Sie sie in jeder Umgebung verwenden können. Das Ergebnis dieser Funktion ist eine gültige Javascript-Objektdeklaration.

Ich würde nicht bezweifeln, dass so etwas schon irgendwo auf SO war, aber es war nur kürzer, es zu schaffen, als eine Weile nach Antworten zu suchen. Und da diese Frage mein Top-Hit bei Google war, als ich anfing, danach zu suchen; Ich dachte, es hier zu platzieren könnte anderen helfen.

Das Ergebnis dieser Funktion ist jedoch eine Zeichenfolgendarstellung Ihres Objekts, selbst wenn Ihr Objekt eingebettete Objekte und Arrays enthält und selbst wenn diese Objekte oder Arrays noch weitere eingebettete Objekte und Arrays enthalten. (Ich habe gehört, dass du gerne trinkst? Also habe ich dein Auto mit einem Kühler gepimpt. Und dann habe ich deinen Kühler mit einem Kühler gepimpt. Also kann dein Kühler trinken, während du cool bist.)

Arrays werden mit []statt gespeichert {}und haben daher keine Schlüssel / Wert-Paare, sondern nur Werte. Wie normale Arrays. Daher werden sie wie Arrays erstellt.

Außerdem werden alle Zeichenfolgen (einschließlich Schlüsselnamen) in Anführungszeichen gesetzt. Dies ist nur erforderlich, wenn diese Zeichenfolgen Sonderzeichen enthalten (z. B. ein Leerzeichen oder einen Schrägstrich). Aber ich hatte keine Lust, dies zu entdecken, nur um einige Zitate zu entfernen, die sonst immer noch gut funktionieren würden.

Diese resultierende Zeichenfolge kann dann verwendet werden evaloder einfach in eine Var-Through-Zeichenfolgenmanipulation ausgegeben werden. So erstellen Sie Ihr Objekt erneut aus Text.

function ObjToSource(o){
    if (!o) return 'null';
    var k="",na=typeof(o.length)=="undefined"?1:0,str="";
    for(var p in o){
        if (na) k = "'"+p+ "':";
        if (typeof o[p] == "string") str += k + "'" + o[p]+"',";
        else if (typeof o[p] == "object") str += k + ObjToSource(o[p])+",";
        else str += k + o[p] + ",";
    }
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

Lassen Sie mich wissen, wenn ich alles durcheinander gebracht habe, funktioniert gut in meinen Tests. Die einzige Möglichkeit, einen Typ zu erkennen, arraybestand darin, das Vorhandensein von zu überprüfen length. Da Javascript Arrays wirklich als Objekte speichert, kann ich nicht nach Typ suchen array(es gibt keinen solchen Typ!). Wenn jemand einen besseren Weg kennt, würde ich ihn gerne hören. Wenn Ihr Objekt auch eine Eigenschaft mit dem Namen lengthhat, wird es von dieser Funktion fälschlicherweise als Array behandelt.

BEARBEITEN: Prüfung für Objekte mit Nullwert hinzugefügt. Danke Brock Adams

BEARBEITEN: Unten ist die feste Funktion, um unendlich rekursive Objekte drucken zu können. Dies wird nicht wie toSourcebei FF toSourcegedruckt, da die unendliche Rekursion einmal gedruckt wird, wobei diese Funktion sie sofort beendet. Diese Funktion läuft langsamer als die oben beschriebene, daher füge ich sie hier hinzu, anstatt die obige Funktion zu bearbeiten, da sie nur benötigt wird, wenn Sie Objekte übergeben möchten, die irgendwo wieder mit sich selbst verknüpft sind.

const ObjToSource=(o)=> {
    if (!o) return null;
    let str="",na=0,k,p;
    if (typeof(o) == "object") {
        if (!ObjToSource.check) ObjToSource.check = new Array();
        for (k=ObjToSource.check.length;na<k;na++) if (ObjToSource.check[na]==o) return '{}';
        ObjToSource.check.push(o);
    }
    k="",na=typeof(o.length)=="undefined"?1:0;
    for(p in o){
        if (na) k = "'"+p+"':";
        if (typeof o[p] == "string") str += k+"'"+o[p]+"',";
        else if (typeof o[p] == "object") str += k+ObjToSource(o[p])+",";
        else str += k+o[p]+",";
    }
    if (typeof(o) == "object") ObjToSource.check.pop();
    if (na) return "{"+str.slice(0,-1)+"}";
    else return "["+str.slice(0,-1)+"]";
}

Prüfung:

var test1 = new Object();
test1.foo = 1;
test1.bar = 2;

var testobject = new Object();
testobject.run = 1;
testobject.fast = null;
testobject.loop = testobject;
testobject.dup = test1;

console.log(ObjToSource(testobject));
console.log(testobject.toSource());

Ergebnis:

{'run':1,'fast':null,'loop':{},'dup':{'foo':1,'bar':2}}
({run:1, fast:null, loop:{run:1, fast:null, loop:{}, dup:{foo:1, bar:2}}, dup:{foo:1, bar:2}})

HINWEIS: Der Versuch zu drucken document.bodyist ein schreckliches Beispiel. Zum einen druckt FF bei Verwendung nur eine leere Objektzeichenfolge toSource. Und wenn Sie die obige Funktion verwenden, stürzt FF ab SecurityError: The operation is insecure.. Und Chrome wird weiter abstürzen Uncaught RangeError: Maximum call stack size exceeded. Es war klar, dass document.bodyes nicht in einen String konvertiert werden sollte. Weil es entweder zu groß ist oder gegen Sicherheitsrichtlinien verstößt, um auf bestimmte Eigenschaften zuzugreifen. Es sei denn, ich habe hier oben etwas durcheinander gebracht, erzähl es doch!


Absturzanfällig. Versuchen Sie es ObjToSource(document.body)zum Beispiel.
Brock Adams

ok, ich habe das Problem gefunden. Ich habe nicht nach Objekten mit null Werten gesucht. Das ist jetzt behoben. Aber Sie können immer noch nicht ObjToSource(document.body)wegen der unendlichen Rekursion tun . Auch document.body.toSource()in FireFox wird ein leeres Objekt zurückgegeben.
Pimp Trizkit

@BrockAdams - Dort ist es jetzt für unendliche Rekursion behoben, kann aber document.bodyimmer noch nicht gedruckt werden. Siehe Anmerkung.
Pimp Trizkit

document.bodywar nur eine Abkürzung, um auf einige große Probleme hinzuweisen. Sie haben jetzt das Schlimmste behoben und ich habe bereits gestimmt. (Obwohl ich glaube, dass ein anderer Ansatz damit umgehen könnte document.body. Die meisten Antworten hier würden auch nicht gut dagegen sein.)
Brock Adams

Nun, wenn Sie (oder jemand anderes) Ideen haben, wie Sie die Tatsache überwinden können, dass ein so großes Objekt den Stapel während der Rekursion ausfüllt oder Sicherheitsbeschränkungen umgeht. Ich würde es gerne hören. Danke für die Abstimmung!
Pimp Trizkit

14

Wenn Sie das Objekt in voller Länge drucken möchten, können Sie verwenden

console.log (require ('util'). inspect (obj, {showHidden: false, depth: null})

Wenn Sie das Objekt drucken möchten, indem Sie es in die Zeichenfolge konvertieren, dann

console.log (JSON.stringify (obj));


Sie müssten das hinzufügen, JSON.stringifywenn Sie versuchen, mit einem Zeichenfolgenobjekt zu verketten. Wenn Sie verwenden console.log(object), sollte es den Inhalt des Objekts hübsch drucken
Satadru Biswas


11

Ich brauchte eine Möglichkeit, das Objekt rekursiv zu drucken, was die Antwort von pagewil lieferte (Danke!). Ich habe es ein wenig aktualisiert, um eine Möglichkeit zum Drucken bis zu einer bestimmten Ebene einzuschließen und Abstände hinzuzufügen, damit es basierend auf der aktuellen Ebene, in der wir uns befinden, richtig eingerückt ist, damit es besser lesbar ist.

// Recursive print of object
var print = function( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '<pre>';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...</br>';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ': ' + o[p] + ' </br>';
        } else {
            str += levelStr +
                p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '</pre>';
    }
    return str;
};

Verwendungszweck:

var pagewilsObject = {
    name: 'Wilson Page',
    contact: {
        email: 'wilson@hotmail.com',
        tel: '123456789'
    }  
}

// Recursive of whole object
$('body').append( print(pagewilsObject) ); 

// Recursive of myObject up to 1 level, will only show name 
// and that there is a contact object
$('body').append( print(pagewilsObject, 1) ); 

Braucht Arbeit. Es fehlen Kommas, Anführungszeichen usw.
posfan12

6

Ich benutze immer console.log("object will be: ", obj, obj1). Auf diese Weise muss ich die Problemumgehung mit stringify nicht mit JSON durchführen. Alle Eigenschaften des Objekts werden schön erweitert.


6

Eine andere Möglichkeit, Objekte in der Konsole anzuzeigen, ist mit JSON.stringify. Überprüfen Sie das folgende Beispiel:

var gandalf = {
  "real name": "Gandalf",
  "age (est)": 11000,
  "race": "Maia",
  "haveRetirementPlan": true,
  "aliases": [
    "Greyhame",
    "Stormcrow",
    "Mithrandir",
    "Gandalf the Grey",
    "Gandalf the White"
  ]
};
//to console log object, we cannot use console.log("Object gandalf: " + gandalf);
console.log("Object gandalf: ");
//this will show object gandalf ONLY in Google Chrome NOT in IE
console.log(gandalf);
//this will show object gandalf IN ALL BROWSERS!
console.log(JSON.stringify(gandalf));
//this will show object gandalf IN ALL BROWSERS! with beautiful indent
console.log(JSON.stringify(gandalf, null, 4));

5

Javascript-Funktion

<script type="text/javascript">
    function print_r(theObj){ 
       if(theObj.constructor == Array || theObj.constructor == Object){ 
          document.write("<ul>") 
          for(var p in theObj){ 
             if(theObj[p].constructor == Array || theObj[p].constructor == Object){ 
                document.write("<li>["+p+"] => "+typeof(theObj)+"</li>"); 
                document.write("<ul>") 
                print_r(theObj[p]); 
                document.write("</ul>") 
             } else { 
                document.write("<li>["+p+"] => "+theObj[p]+"</li>"); 
             } 
          } 
          document.write("</ul>") 
       } 
    } 
</script>

Objekt drucken

<script type="text/javascript">
print_r(JAVACRIPT_ARRAY_OR_OBJECT);
</script> 

über print_r in Javascript


Ich bin nicht sicher, ob dies ein Fehler in dem von mir verwendeten js.do-Beispiel ist, aber dies scheint nur den ersten vollständigen "Zweig" des Baums auszugeben. dh es folgt die erste Referenz der ersten Referenz ... ad infinitum
Jon Story

5
var list = function(object) {
   for(var key in object) {
     console.log(key);
   }
}

Wo objectist dein Objekt?

oder Sie können dies in Chrome Dev Tools, Registerkarte "Konsole" verwenden:

console.log(object);


Ich denke, Ihre Antwort ist unvollständig. (nicht ich, die Downvote verursachen) Dies, noch drucken Sie nur den Schlüssel ..
Abdillah

1
danke für deine antwort, es hat mich dazu inspiriert: console.log(Object.keys(object));obwohl ich weiß, dass nur die eigenschaftsschlüssel gedruckt werden, reicht es mir für meine zwecke;)
Wilson

5

Objekt annehmen obj = {0:'John', 1:'Foo', 2:'Bar'}

Objektinhalt drucken

for (var i in obj){
    console.log(obj[i], i);
}

Konsolenausgabe (Chrome DevTools):

John 0
Foo 1
Bar 2

Ich hoffe, das hilft!


4

Ich bevorzuge die Verwendung console.table, um ein klares Objektformat zu erhalten. Stellen Sie sich also vor, Sie haben dieses Objekt:

const obj = {name: 'Alireza', family: 'Dezfoolian', gender: 'male', netWorth: "$0"};

Und Sie werden unten eine ordentliche und lesbare Tabelle wie diese sehen: console.table


3

Eine kleine Hilfsfunktion, die ich in meinen Projekten immer zum einfachen, schnellen Debuggen über die Konsole verwende. Inspiration von Laravel.

/**
 * @param variable mixed  The var to log to the console
 * @param varName string  Optional, will appear as a label before the var
 */
function dd(variable, varName) {
    var varNameOutput;

    varName = varName || '';
    varNameOutput = varName ? varName + ':' : '';

    console.warn(varNameOutput, variable, ' (' + (typeof variable) + ')');
}

Verwendungszweck

dd(123.55); Ausgänge:
Geben Sie hier die Bildbeschreibung ein

var obj = {field1: 'xyz', field2: 2016};
dd(obj, 'My Cool Obj'); 

Geben Sie hier die Bildbeschreibung ein


3

Sie können auch das ES6-Vorlagenliteral-Konzept verwenden, um den Inhalt eines JavaScript-Objekts in einem Zeichenfolgenformat anzuzeigen.

alert(`${JSON.stringify(obj)}`);

const obj  = {
  "name" : "John Doe",
  "habbits": "Nothing",
};
alert(`${JSON.stringify(obj)}`);


2

Ich habe die Druckmethode von pagewil verwendet und es hat sehr gut funktioniert.

Hier ist meine leicht erweiterte Version mit (schlampigen) Einrückungen und unterschiedlichen Trennzeichen für Prop / Ob:

var print = function(obj, delp, delo, ind){
    delp = delp!=null ? delp : "\t"; // property delimeter
    delo = delo!=null ? delo : "\n"; // object delimeter
    ind = ind!=null ? ind : " "; // indent; ind+ind geometric addition not great for deep objects
    var str='';

    for(var prop in obj){
        if(typeof obj[prop] == 'string' || typeof obj[prop] == 'number'){
          var q = typeof obj[prop] == 'string' ? "" : ""; // make this "'" to quote strings
          str += ind + prop + ': ' + q + obj[prop] + q + '; ' + delp;
        }else{
          str += ind + prop + ': {'+ delp + print(obj[prop],delp,delo,ind+ind) + ind + '}' + delo;
        }
    }
    return str;
};

Es ist sehr schlampig.
posfan12

2

Eine weitere Modifikation des Pagewils-Codes ... er druckt nichts anderes als Strings aus und lässt die Zahlen- und Booleschen Felder leer, und ich habe den Tippfehler für den zweiten Typ von direkt innerhalb der von Megaboss erstellten Funktion behoben.

var print = function( o, maxLevel, level )
{
    if ( typeof level == "undefined" )
    {
        level = 0;
    }
    if ( typeof maxlevel == "undefined" )
    {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 )
    {
        str = '<pre>';   // can also be <pre>
    }

    var levelStr = '<br>';
    for ( var x = 0; x < level; x++ )
    {
        levelStr += '    ';   // all those spaces only work with <pre>
    }

    if ( maxLevel != 0 && level >= maxLevel )
    {
        str += levelStr + '...<br>';
        return str;
    }

    for ( var p in o )
    {
        switch(typeof o[p])
        {
          case 'string':
          case 'number':    // .tostring() gets automatically applied
          case 'boolean':   // ditto
            str += levelStr + p + ': ' + o[p] + ' <br>';
            break;

          case 'object':    // this is where we become recursive
          default:
            str += levelStr + p + ': [ <br>' + print( o[p], maxLevel, level + 1 ) + levelStr + ']</br>';
            break;
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 )
    {
        str += '</pre>';   // also can be </pre>
    }
    return str;
};

2

Hier ist die Funktion.

function printObj(obj) {
console.log((function traverse(tab, obj) {
    let str = "";
    if(typeof obj !== 'object') {
        return obj + ',';
    }
    if(Array.isArray(obj)) {            
        return '[' + obj.map(o=>JSON.stringify(o)).join(',') + ']' + ',';
    }
    str = str + '{\n';
    for(var p in obj) {
        str = str + tab + ' ' + p + ' : ' + traverse(tab+' ', obj[p]) +'\n';
    }
    str = str.slice(0,-2) + str.slice(-1);                
    str = str + tab + '},';
    return str;
}('',obj).slice(0,-1)))};

Es kann Objekte mit lesbarem Tabulatoreinzug anzeigen.


Sicher erschossen, um Ihren Browser zum Absturz zu bringen: P
Satadru Biswas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.