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 compact
właściwość w opcjonalnym options
argumencie; 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 .true
3
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ć breakLength
opcji, 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
module
w 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 obj
lub 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.