Kompilacja wielu użytecznych odpowiedzi z (przynajmniej) Node.js v0.10.33(stabilny) / v0.11.14(niestabilny) prawdopodobnie poprzez (przynajmniej) v7.7.4(aktualną wersję z ostatniej aktualizacji tej odpowiedzi). Czubek kapelusza dla Rory O'Kane za pomoc.
tl; dr
Aby uzyskać pożądany wynik dla przykładu w pytaniu, użyj console.dir():
console.dir(myObject, { depth: null }); // `depth: null` ensures unlimited recursion
Dlaczego nie util.inspect()? Bo to już na samym wyjściu diagnostycznym console.log()i console.dir()jak również node.js REPL używać util.inspect() niejawnie . Zasadniczo nie jest koniecznerequire('util')util.inspect() bezpośrednie połączenie .
Szczegóły poniżej.
- REPL : domyślnie drukuje wartość zwrotną dowolnego wyrażenia za
util.inspect() pomocą kolorowania składni ;
tzn. wystarczy wpisać nazwę zmiennej i nacisnąć Enter, aby wydrukować sprawdzoną wersję jej wartości; na przykład:
o = { one: 1, two: 'deux', foo: function(){} } // The REPL echoes the object definition with syntax coloring.
util.inspect()automatycznie ładnie drukuje reprezentacje obiektów i tablic , ale generuje wielowierszowe dane wyjściowe tylko w razie potrzeby .
Zachowanie ładnego drukowania może być kontrolowane przez compactwłaściwość w opcjonalnym optionsargumencie; bezwarunkowofalse używa wyjścia wieloliniowego , a całkowicie wyłącza ładne drukowanie; można go również ustawić na liczbę (domyślnie jest to ), aby kontrolować warunkowe zachowanie wielu linii - patrz dokumentacja .true3
Domyślnie, wynik jest zawijany na około 60 znaków dzięki, Shrey
, niezależnie od tego, czy dane wyjściowe są wysyłane do pliku czy terminala. W praktyce, ponieważ podziały linii występują tylko na granicach właściwości , często kończy się to krótszymi liniami, ale mogą być one również dłuższe (np. Z długimi wartościami właściwości).
W wersji 6.3.0 + możesz użyć breakLengthopcji, aby zastąpić limit 60 znaków; jeśli ustawisz na Infinity, wszystko jest wyprowadzane w jednym wierszu.
Jeśli chcesz mieć większą kontrolę nad ładnym drukowaniem, rozważ użycie JSON.stringify()trzeciego argumentu , ale zwróć uwagę na następujące kwestie :
- Nie działa z obiektami, które mają odwołania cykliczne , na przykład
modulew kontekście globalnym.
- Metody (funkcje) z założenia NIE zostaną uwzględnione.
- Nie możesz włączyć wyświetlania ukrytych (niepoliczalnych) właściwości.
- Przykładowe wywołanie:
JSON.stringify({ one: 1, two: 'deux', three: true}, undefined, 2); // creates a pretty-printed multiline JSON representation indented with 2 spaces
util.inspect()obiekt opcji (drugi argument):
Można przekazać opcjonalny obiekt opcji, który zmienia niektóre aspekty sformatowanego ciągu; niektóre obsługiwane właściwości to:
Zobacz najnowsze dokumenty Node.js, aby uzyskać aktualną, pełną listę.
showHidden
- jeśli
true, to zostaną również wyświetlone niepoliczalne właściwości obiektu [te, które mają nie pojawiać się podczas używania for keys in objlub Object.keys(obj)]. Domyślnie to false.
depth
- informuje, ile razy ma się powtarzać podczas formatowania obiektu. Jest to przydatne do kontroli dużych skomplikowanych obiektów. Domyślnie jest to 2. Aby powtarzać się w nieskończoność, podaj
null.
colors
- jeśli true, wówczas wyjście będzie stylizowane za pomocą kodów kolorów ANSI. Domyślnie to
false. Kolory można dostosowywać [… - patrz link].
customInspect
- jeśli
false, to inspect()funkcje niestandardowe zdefiniowane na kontrolowanych obiektach nie będą wywoływane. Domyślnie to true.
util.format()symbole zastępcze ciągu formatu (pierwszy argument)
Niektóre z obsługiwanych symboli zastępczych to:
Zobacz najnowsze dokumenty Node.js, aby uzyskać aktualną, pełną listę.
%s - Strunowy.
%d - Liczba (zarówno liczba całkowita, jak i liczba zmiennoprzecinkowa).
%j - JSON.
%%- pojedynczy znak procentu („%”). To nie zużywa argumentu.