Jak mogę wyświetlić obiekt JavaScript?


1615

Jak wyświetlić zawartość obiektu JavaScript w formacie ciągu znaków, np. Gdy jesteśmy alertzmienną?

W ten sam sformatowany sposób chcę wyświetlić obiekt.


7
Czy mógłbyś przeredagować swoje pytanie? Co rozumiesz przez „sformatowany sposób”? Jak w przypadku bogatego formatowania, takiego jak pogrubienie / kursywa / itp?
Sasha Chedygov

Czy istnieje sposób wyświetlenia wartości czasu działania zmiennej poprzez wydrukowanie wartości zmiennej za pomocą niektórych poleceń konsoli?
BlackPanther

1
@BlackPanther Po prostu zrób console.log("", yourObject1, yourObject2, yourObject3, etc...);. Krótsza wersja jest po prostu do zrobienia console.log(yourObject1, yourObject2, etc...);.
tom_mai78101

2
Czy możesz wybrać lepszą odpowiedź, która dokładniej odzwierciedla konsensus społeczności?
HoldOffHunger

W ten sposóbconsole.log('a string', aNumber, anObject)
onmyway133

Odpowiedzi:


1068

Jeśli chcesz wydrukować obiekt w celu debugowania, użyj kodu:

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

wyświetli się:

chromowana konsola zrzutu ekranu

Uwaga: musisz tylko zalogować obiekt. Na przykład to nie zadziała:

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

Uwaga : w logmetodzie można również użyć przecinka , wówczas pierwszym wierszem danych wyjściowych będzie ciąg znaków, a następnie obiekt zostanie zrenderowany:

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

43
Ta funkcja działa również w przeglądarce Google Chrome podczas korzystania z konsoli JavaScript (Shift + Control + J lub Shift + Control + I, w zależności od wersji Chrome). Zauważ też, że console.log(obj1, obj2)działa również bardzo ładnie, więc nie musisz wywoływać console.log()każdego obiektu podczas rejestrowania wielu zmiennych. Pamiętaj też, aby usunąć wszystkie takie wywołania w produkcji, ponieważ spowoduje to uszkodzenie przeglądarek, które go nie implementują (takich jak Internet Explorer).
Felix

102
Tak, drukuje [Object Object], ale obok niego znajduje się mały przycisk, który pozwala ci przeglądać zawartość obiektu.
obejmuje

12
@hughes to faktycznie może zrobić obie rzeczy. mam obiekt, który utworzyłem za pomocą: var obj = {"foo": false}; a inny obiekt przekazywany do wywołania zwrotnego z serwera, ten przekazywany przez wywołanie zwrotne drukuje małą strzałką, aby można go otworzyć, statycznie utworzony drukuje po prostu [obiekt obiektowy] bez strzałki. Próbuję to rozgryźć, jakieś inne myśli?
benstraw

124
console.log("id:"+obj);nie wyświetli się poprawnie, ponieważ wyświetla ciąg znaków tak, jak go tam widzisz, musisz określić go w następujący sposób:console.log("id:"); console.log(obj);
Anriëtte Myburgh

14
Spróbuj console.log(JSON.stringify(obj))lubconsole.dir(obj)
Robot Boy

2009

Użyj JSON.stringifymetody natywnej . Działa z zagnieżdżonymi obiektami i wszystkie główne przeglądarki obsługują tę metodę.

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 do strony Mozilla API Reference i innych przykładów.

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

Użyj niestandardowego zamiennika JSON.stringify, jeśli napotkasz ten błąd Javascript

"Uncaught TypeError: Converting circular structure to JSON"

326
Aby uzyskać bardziej czytelny wynik, wypróbuj JSON.stringify (obj, null, 4). Spowoduje to zapisanie go w formie starannie wciętego tekstu
Ben Clayton,

2
JSON.stringify może wyświetlać tylko niewielki podzbiór wartości javascript i zgłasza wyjątek dla reszty - console.log nie ma tego problemu.
Pamiętaj Monica

11
Jeśli jesteś nowicjuszem takim jak ja, nie zapomnij console.lognp.console.log(JSON.stringify(obj,null, 4));
nilesh

2
„Nieprzechwycony błąd typu: Konwersja struktury kołowej na JSON”, gdy ob = okno.
Michael

1
Miałem przypadki, w których to nie działało: pokazywało {}dla niepustego obiektu. Pamiętaj więc, aby sprawdzić, console.log(obj)zanim Twój obiekt będzie pusty po strigify()powrocie {}.
Sindarus

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

1
Właśnie tego chcę. Korzystam z Google Maps v3 i kierunekrenderer zwraca obiekt. Ma cztery elementy, a nazwa jednego obiektu ciągle się zmienia, więc musimy to znaleźć. Do tego ta metoda naprawdę pomogła. Poza tym w ten sposób możemy uzyskać wszystkie nazwy właściwości i obiektów. Czy jest jakiś inny sposób na znalezienie nazw obiektów i właściwości?
Jayapal Chandran

34
+1, nie wszystkie javascript są uruchamiane w przeglądarkach lub mogą być w nich debugowane.
Bill Yang,

3
Prawdopodobnie chcesz przez większość czasu maskować wbudowany cruft hasOwnProperty.
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
Trochę późno to znalazłem, ale jak o to poprosiłem w moje urodziny w zeszłym roku (29 sierpnia), oto działające skrzypce. jsfiddle.net/MrMarlow/fq53o6o9
MrMarlow

124

console.dir(object):

Wyświetla interaktywną listę właściwości określonego obiektu JavaScript. Ta lista pozwala używać trójkątów ujawnienia do badania zawartości obiektów potomnych.

Pamiętaj, że ta console.dir()funkcja jest niestandardowa. Zobacz MDN Web Docs


1
Tak, jest to dobre rozwiązanie, jednak działa tylko tak, jak chcesz, jeśli chcesz rejestrować tylko obiekt (np. Console.dir (obj)). Jeśli chcesz połączyć żądło z wyjściem, otrzymasz [obiekt Object].
Zoman

Ogromną zaletą console.dirjest to, że możesz nadal rozwijać i odczytywać wartości w konsoli po zmiataniu zmiennej. Jest to opisane w innym artykule SO
Dawson B

Kolejną zaletą console.dirjest to, że kiedy zapisujesz konsolę do pliku, wszystkie właściwości są w pliku zgodnie z oczekiwaniami. Nie dzieje się tak, gdy używa się tylko console.log.
Kepi

79

Spróbuj tego :

console.log(JSON.stringify(obj))

Spowoduje to wydrukowanie wersji obiektu stringify. Zamiast tego [object]jako wynik otrzymasz zawartość obiektu.


7
typeerror: Converting circular structure to JSON?
Kaiden Prince

@KaidenPrince zobacz tę odpowiedź na swój błąd: stackoverflow.com/questions/4816099/... Prawdopodobnie jest to element DOM w twoim obiekcie. W takim przypadku najlepiej jest zalogować się do konsoli w chrome lub firefox i tam sprawdzić. W przeciwnym razie trzeba by usunąć wszystkie okrągłe elementy przed wywołaniem pliku JSON.stringify, aby działał.
Ace Hyzer,

Rozwiązaniem jest po prostu podzielenie na 2 osobne komendy, wierzcie lub nie: console.log ("id:"); console.log (obj);
Collin Chaffin

66

Cóż, Firefox (dzięki @Bojangles za szczegółowe informacje) ma Object.toSource()metodę, która drukuje obiekty jako JSON i function(){}.

To chyba wystarcza do większości celów debugowania.


6
Object.toSource () wydaje się nie działać w Chrome, czy jest to oczekiwane? Czy też Chrome nie należy do „zaawansowanych przeglądarek”? =)
tstyle

44
Stary wątek, właśnie znalazłem go w Google. .toSource()to tak naprawdę tylko Firefox . Pomyślałem, że dam ci znać.
Bojangles,

52

Jeśli chcesz użyć alertu, aby wydrukować obiekt, możesz to zrobić:

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

Powinien wydrukować każdą właściwość i odpowiadającą jej wartość w formacie ciągu.


18
toSource () nie działa w przeglądarkach innych niż gecko (np. Chrome, Safari)
Yarin

37

Jeśli chcesz zobaczyć dane w formacie tabelarycznym, możesz użyć

console.table(obj);

Tabelę można posortować, klikając kolumnę tabeli.

Możesz także wybrać kolumny do wyświetlenia:

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

Więcej informacji na temat console.table można znaleźć tutaj



33

Funkcjonować:

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;
}

Stosowanie:

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

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

Przykład:

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


Metoda drukowania wywołuje przeglądarkę, aby wydrukować stronę do pdf: p
Marwen Trabelsi

@ jsh powinieneś odwrócić if-else i sprawdzić obiekt zamiast samego łańcucha. zaktualizowane skrzypce: jsfiddle.net/6eqMn/594
Michael Walter

1
@wilsonpage Nie działa, jeśli dodam wartość całkowitą do właściwości tel :(
ni3

26

Po prostu użyj

JSON.stringify(obj)

Przykład

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

Lub

alert(args_string);

Uwaga: funkcje w javascript są uważane za obiekty.

Jako dodatkowa uwaga:

W rzeczywistości możesz przypisać nową właściwość taką jak ta i uzyskać do niej dostęp do pliku console.log lub wyświetlić ją w trybie alertu

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

1
Samo pytanie brzmi: „Jak wtedy, gdy„ ostrzegamy ”zmienną”, więc tak naprawdę nie jest to odpowiedź. A także twoja inna opcja „JSON.stringify (obj)” została już wspomniana w „27 listopada 2010 r.”, Zaśmiecasz to pytanie tylko duplikatami i brakami odpowiedzi. W tym kontekście nie ma również sensu przypisywanie nowych właściwości.
Paul


18

Jak powiedziano wcześniej, najlepszym i najprostszym sposobem, jaki znalazłem, było

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

Jest to najłatwiejsze i najszybsze rozwiązanie, jednak nie działa na dużych obiektach, takich jak navigator.
someguy234


16

Uwaga: W tych przykładach yourObj definiuje obiekt, który chcesz zbadać.

Po pierwsze mój najmniej ulubiony, ale najczęściej wykorzystywany sposób wyświetlania obiektu:

Jest to defaktyczny sposób wyświetlania zawartości obiektu

console.log(yourObj)

wyprodukuje coś takiego: wprowadź opis zdjęcia tutaj

Myślę, że najlepszym rozwiązaniem jest przejrzenie kluczy obiektów, a następnie wartości obiektów, jeśli naprawdę chcesz zobaczyć, co zawiera obiekt ...

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

Wyprowadzi coś takiego: wprowadź opis zdjęcia tutaj (na zdjęciu powyżej: klucze / wartości przechowywane w obiekcie)

Istnieje również ta nowa opcja, jeśli używasz ECMAScript 2016 lub nowszej wersji:

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

Spowoduje to uporządkowane wyjście: wprowadź opis zdjęcia tutaj Rozwiązanie wspomniane w poprzedniej odpowiedzi: console.log(yourObj)wyświetla zbyt wiele parametrów i nie jest najbardziej przyjaznym dla użytkownika sposobem wyświetlania pożądanych danych . Dlatego polecam rejestrowanie kluczy, a następnie wartości osobno.

Dalej:

console.table(yourObj)

Ktoś z wcześniejszego komentarza zasugerował ten, jednak dla mnie to nigdy nie zadziałało. Jeśli to działa na kogoś innego w innej przeglądarce lub coś w tym stylu, wtedy kudos! Nadal umieszczam kod tutaj w celach informacyjnych! Wyśle coś takiego do konsoli: wprowadź opis zdjęcia tutaj


Czy rozszerzyłbyś przykład o obiekt i obiekt.
historystamp

nie jestem pewien, czy rozumiem komentarz, ale dodałem różne nazwy dla obiektów, które powinny mieć nazwę. obiekt nie był wystarczająco wyraźny.
Max Alexander Hanna

console.table(yourObj) pracował dla mnie w Google Chrome w wersji 77.0.3865.90 (oficjalna wersja) (64-bit). Dzięki za udostępnienie!
Devner

15

(Zostało to dodane do mojej biblioteki na GitHub )

Odkryj na nowo koło tutaj! Żadne z tych rozwiązań nie działało w mojej sytuacji. Szybko więc udokumentowałem odpowiedź wilsonpage'a . Ten nie jest przeznaczony do drukowania na ekranie (przez konsolę, pole tekstowe lub cokolwiek innego). To działa dobrze w takich sytuacjach i działa dobrze, zgodnie z wnioskiem PO alert. Wiele odpowiedzi tutaj nie dotyczy użycia alertzgodnie z żądaniem PO. W każdym razie jest on jednak sformatowany do przesyłania danych. Ta wersja wydaje się zwracać bardzo podobny wynik jak toSource(). Nie testowałem przeciwko JSON.stringify, ale zakładam, że chodzi o to samo. Ta wersja jest bardziej jak poly-fil, dzięki czemu można go używać w dowolnym środowisku. Wynikiem tej funkcji jest poprawna deklaracja obiektu JavaScript.

Nie wątpiłbym, że coś takiego już gdzieś jest na SO, ale było to tylko krótsze, aby to zrobić, niż spędzić chwilę na szukaniu poprzednich odpowiedzi. A ponieważ to pytanie było moim największym hitem w Google, kiedy zacząłem o tym szukać; Pomyślałem, że umieszczenie go tutaj może pomóc innym.

W każdym razie wynikiem tej funkcji będzie ciąg znaków reprezentujący obiekt, nawet jeśli obiekt ma obiekty osadzone i tablice, a nawet jeśli te obiekty lub tablice mają jeszcze inne obiekty osadzone i tablice. (Słyszałem, że lubisz pić? A więc wypompowałem twój samochód chłodnicą. A potem wypchnąłem twoją lodówkę chłodnicą. Więc twoja chłodnica może pić, kiedy jesteś cool.)

Tablice są przechowywane []zamiast, {}a zatem nie mają par klucz / wartość, tylko wartości. Jak zwykłe tablice. Dlatego są tworzone tak jak tablice.

Również wszystkie ciągi (w tym nazwy kluczy) są cytowane, nie jest to konieczne, chyba że ciągi te zawierają znaki specjalne (takie jak spacja lub ukośnik). Ale nie chciałem tego wykrywać, aby usunąć niektóre cytaty, które w przeciwnym razie nadal działałyby dobrze.

Ten wynikowy ciąg może być następnie użyty z evallub po prostu zrzucony do manipulacji ciągiem var varru. W ten sposób ponownie utworzysz obiekt z tekstu.

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)+"]";
}

Daj mi znać, jeśli wszystko zepsułem, działa dobrze w moich testach. Jedynym sposobem, w jaki mogłem wymyślić typ, arraybyło sprawdzenie jego obecności length. Ponieważ JavaScript naprawdę przechowuje tablice jako obiekty, nie mogę sprawdzić typu array(nie ma takiego typu!). Jeśli ktoś inny zna lepszy sposób, chciałbym to usłyszeć. Ponieważ jeśli twój obiekt ma również właściwość o nazwie, lengthfunkcja ta omyłkowo potraktuje ją jako tablicę.

EDYCJA: Dodano sprawdzanie obiektów o wartości zerowej. Dzięki, Brock Adams

EDYCJA: Poniżej znajduje się stała funkcja umożliwiająca drukowanie nieskończenie rekurencyjnych obiektów. To nie jest drukowane tak samo jak toSourcez FF, ponieważ toSourcewydrukuje nieskończoną rekurencję jeden raz, gdzie jak, ta funkcja natychmiast ją zabije. Ta funkcja działa wolniej niż powyższa, więc dodaję ją tutaj zamiast edytować powyższą funkcję, ponieważ jest ona potrzebna tylko wtedy, gdy planujesz gdzieś przekazać obiekty, które łączą się z sobą.

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)+"]";
}

Test:

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());

Wynik:

{'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}})

UWAGA: Próba wydrukowania document.bodyjest okropnym przykładem. Po pierwsze, FF po prostu drukuje pusty ciąg znaków obiektu podczas używania toSource. Podczas korzystania z powyższej funkcji FF ulega awarii SecurityError: The operation is insecure.. Chrome się zawiesi Uncaught RangeError: Maximum call stack size exceeded. Oczywiście document.bodynie miał być konwertowany na ciąg znaków. Ponieważ jest albo za duży, albo przeciwko polityce bezpieczeństwa, aby uzyskać dostęp do niektórych właściwości. Chyba, że ​​coś tu pomieszałem, powiedz!


Podatny na awarie. Spróbuj ObjToSource(document.body)na przykład.
Brock Adams,

ok, znalazłem problem. Nie sprawdzałem obiektów o wartości zerowej. To jest teraz naprawione. Ale nadal nie możesz ObjToSource(document.body)tego zrobić z powodu nieskończonej rekurencji. Nawet document.body.toSource()w FireFox zwraca pusty obiekt.
Pimp Trizkit,

@BrockAdams - Teraz jest naprawiony na nieskończoną rekurencję, jednak document.bodynadal nie jest drukowany. UWAGA.
Pimp Trizkit,

document.bodybył tylko skrótem do wskazania pewnych poważnych problemów. Naprawiłeś już najgorsze z nich, a ja już głosowałem. (Chociaż uważam, że inne podejście byłoby w stanie poradzić sobie document.body. Większość odpowiedzi tutaj też by się nie przydała.)
Brock Adams,

Cóż, jeśli ty (lub ktokolwiek inny) masz jakieś pomysły, jak ominąć fakt, że tak duży obiekt zapełni stos podczas rekurencji lub obejdzie ograniczenia bezpieczeństwa. Chciałbym to usłyszeć. Dzięki za głos!
Pimp Trizkit

14

Jeśli chcesz wydrukować obiekt na całej długości, możesz użyć

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

Jeśli chcesz wydrukować obiekt, konwertując go na ciąg, to

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


musisz dodać, JSON.stringifykiedy próbujesz połączyć obiekt string. Jeśli używasz console.log(object), powinno dość wydrukować zawartość obiektu
Satadru Biswas


11

Potrzebowałem sposobu na rekurencyjne wydrukowanie obiektu, co dostarczyła odpowiedź pagewil (Dzięki!). Zaktualizowałem go trochę, aby zawierał sposób drukowania do pewnego poziomu i dodawał odstępy, aby był odpowiednio wcięty na podstawie obecnego poziomu, na którym się znajdujemy, aby był bardziej czytelny.

// 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;
};

Stosowanie:

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) ); 

Wymaga pracy. Brakuje przecinków, cytatów itp.
posfan12

6

Zawsze używam console.log("object will be: ", obj, obj1). w ten sposób nie muszę wykonywać obejścia za pomocą stringify w JSON. Wszystkie właściwości obiektu zostaną ładnie rozszerzone.


6

Innym sposobem wyświetlania obiektów w konsoli jest JSON.stringify. Sprawdź poniższy przykład:

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

Funkcja Javascript

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

Obiekt drukowania

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

przez print_r w JavaScript


Nie jestem pewien, czy jest to błąd w przykładzie js.do, którego używam, ale wydaje się, że generuje on tylko pierwszą pełną „gałąź” drzewa. tzn. wynika z pierwszego odniesienia do pierwszego odniesienia ... ad infinitum
Jon Story

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

gdzie objectjest twój przedmiot

lub możesz użyć tego w narzędziach Chrome dla programistów, zakładka „konsola”:

console.log(object);


Myślę, że twoja odpowiedź jest niepełna. (to nie ja powoduje, że głosuję negatywnie) To jednak tylko wydrukuj klucz ..
Abdillah

1
dzięki za odpowiedź, zainspirowało mnie to do zrobienia tego: console.log(Object.keys(object));chociaż wiem, że drukuje tylko klucze właściwości, to wystarcza mi do moich celów;)
Wilson

5

Załóż obiekt obj = {0:'John', 1:'Foo', 2:'Bar'}

Wydrukuj zawartość obiektu

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

Dane wyjściowe konsoli (Chrome DevTools):

John 0
Foo 1
Bar 2

Mam nadzieję, że to pomaga!


4

Wolę używać console.tabledo uzyskania jasnego formatu obiektu, więc wyobraź sobie, że masz ten obiekt:

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

A poniżej zobaczysz schludny i czytelny stół: konsola.tabela


3

Mała funkcja pomocnicza, której zawsze używam w swoich projektach do prostego i szybkiego debugowania za pomocą konsoli. Inspiracja zaczerpnięta z Laravela.

/**
 * @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) + ')');
}

Stosowanie

dd(123.55); wyjścia:
wprowadź opis zdjęcia tutaj

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

wprowadź opis zdjęcia tutaj


3

Możesz także użyć koncepcji literału szablonu ES6, aby wyświetlić zawartość obiektu JavaScript w formacie ciągu.

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

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


2

użyłem metody drukowania pagewil i działało to bardzo ładnie.

oto moja nieco rozszerzona wersja z (niechlujnymi) wcięciami i wyraźnymi ogranicznikami 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;
};

To jest bardzo niechlujne.
posfan12

2

Kolejna modyfikacja kodu pagewils ... jego nie drukuje niczego poza ciągami znaków i pozostawia puste pola liczbowe i boolowskie, a ja poprawiłem literówkę na drugim typie bezpośrednio w funkcji utworzonej przez megaboss.

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

Oto funkcja.

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)))};

Może pokazywać obiekt za pomocą wcięcia tabulatora z czytelnością.


Strzelaj, by zawiesić swoją przeglądarkę: P
Satadru Biswas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.