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

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"
Sandeep
źródło
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

Odpowiedzi:

394
var output = '';
for (var property in object) {
  output += property + ': ' + object[property]+'; ';
}
alert(output);
Flavius ​​Stef
źródło
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

Pizzaiola Gorgonzola
źródło
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.

Abhishek Goel
źródło
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.

Alamar
źródło
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.

Garry
źródło
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

Vlad Bezden
źródło
34

W NodeJS możesz wydrukować obiekt za pomocą util.inspect(obj). Podaj głębokość, w przeciwnym razie będziesz miał tylko płytki wydruk.

Lander
źródło
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: '[email protected]',
        tel: '123456789'
    }  
}

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

Przykład:

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

wilsonpage
źródło
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);
Raza Rafaideen
źródło
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

Użyj tego:

console.log('print object: ' + JSON.stringify(session));
Walter Caraza
źródło
18

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

var getPrintObject=function(object)
{
    return JSON.stringify(object);
}
jonia
źródło
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

Max Alexander Hanna
źródło
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!

Pimp Trizkit
źródło
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));

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

Oto sposób, aby to zrobić:

console.log("%o", obj);
Anton Harniakou
źródło
Ciekawy. Czy jest więcej informacji na ten temat?
Luke
W kontekście Chrome-dev-tool Google wspomniał o tym w tym linku . odnosząc się do sekcji „Podstawianie i formatowanie ciągów”
chaco
Widziałem to w dokumentach MDN .
Anton Harniakou,
2
Tak niedoceniana odpowiedź, właśnie tego szukałem.
Shubham Kushwah
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: '[email protected]',
        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) ); 
megaboss98
źródło
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.

Nils Petersohn
źródło
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));
Kean Amaral
źródło
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

Mukesh Chapagain
źródło
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);

użytkownik3632930
źródło
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!

atlas
źródło
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

Alireza
źródło
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

George Kagan
źródło
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)}`);

Ritu
źródło
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;
};
nieco mniej
źródło
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;
};
ppetree
źródło
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ą.

Juho Sung
źródło
Strzelaj, by zawiesić swoją przeglądarkę: P
Satadru Biswas