console.log()
Jak mogę uzyskać pełny obiekt podczas debugowania za pomocą ?
const myObject = {
"a":"a",
"b":{
"c":"c",
"d":{
"e":"e",
"f":{
"g":"g",
"h":{
"i":"i"
}
}
}
}
};
console.log(myObject);
Wyjścia:
{ a: 'a', b: { c: 'c', d: { e: 'e', f: [Object] } } }
Ale chcę też zobaczyć zawartość nieruchomości f
.
javascript
node.js
debugging
console.log
Michał Perłakowski
źródło
źródło
v0.10.33
console.log()
domyślnie stosuje sięutil.inspect()
do jego argumentów, zakładając, że pierwszy nie jest łańcuchem formatującym. Jeśli jesteś zadowolony zutil.inspect()
domyślnych opcji, po prostuconsole.log(myObject)
zrobisz - nie musisz tego wymagaćutil
;console.dir()
robi to samo, ale akceptuje tylko `obiekt do sprawdzenia; przynajmniejv0.11.14
możesz przekazać obiekt opcjiutil.inspect()
jako drugi argument; moja odpowiedź zawiera więcej szczegółów.console.log(obj)
nadal drukuje [Obiekt] dla głęboko zagnieżdżonych obiektów :( Naprawdę chciałbym, żeby zachowywał się tak, jak opisano.console.log()
jest niezmiennie ograniczony do 2 poziomów (ponieważ używautil.inspect()
domyślnych bez możliwości zmiany);console.dir()
ma domyślnie ten sam limit, ale możesz przekazać obiekt opcji jako drugi argument, aby to zmienić (który jest przekazywany doutil.inspect()
; zwróć uwagę, żeconsole.dir()
można jednak wydrukować tylko 1 obiekt na raz. Aby wydrukować z nieograniczoną głębokością, użyjconsole.dir(myObject, { depth: null })
,console.dir(myObject, { depth: null })
jest dla mnie pracaMożesz użyć
JSON.stringify
i uzyskać ładne wcięcie, a także być może łatwiejszą do zapamiętania składnię.Trzeci argument ustawia poziom wcięcia, dzięki czemu można go dostosować zgodnie z potrzebami.
Więcej informacji tutaj w razie potrzeby:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
źródło
console.log(JSON.stringify(myObject, null, 4));
całkiem fajne! https://gist.github.com/xgqfrms-GitHub/92aa2b00249f15084d24aa2e0a5d0300Kompilacja 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()
:Dlaczego nie
util.inspect()
? Bo to już na samym wyjściu diagnostycznymconsole.log()
iconsole.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.
console.log()
(i jego aliasconsole.info()
):util.inspect()
jest automatycznie stosowany do każdego argumentu:o = { one: 1, two: 'deux', foo: function(){} }; console.log(o, [1,2,3]) // -> '{ one: 1, two: 'deux', foo: [Function] } [ 1, 2, 3 ]'
util.inspect()
w tym przypadku, co oznacza 2 znaczące ograniczenia:console.log()
, musisz zamiast tego użyćconsole.dir()
:console.dir(myObject, { depth: null }
wydruków z nieograniczoną głębią ; patrz poniżej.util.format()
do wydrukowania pozostałych argumentów na podstawie ciągu formatu (patrz poniżej); na przykład:o = { one: 1, two: 'deux', foo: function(){} }; console.log('o as JSON: %j', o) // -> 'o as JSON: {"one":1,"two":"deux"}'
util.inspect()
.%j
NIE jest ładnie wydrukowany.console.dir()
:util.inspect()
- zasadniczo opakowanieutil.inspect()
bez opcji domyślnie; na przykład:o = { one: 1, two: 'deux', foo: function(){} }; console.dir(o); // Effectively the same as console.log(o) in this case.
util.inspect()
- patrz poniżej; na przykład:console.dir({ one: 1, two: 'deux'}, { colors: true }); // Node 0.11+: Prints object representation with syntax coloring.
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 opcjonalnymoptions
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 naInfinity
, 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 :module
w kontekście globalnym.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
true
, to zostaną również wyświetlone niepoliczalne właściwości obiektu [te, które mają nie pojawiać się podczas używaniafor keys in obj
lubObject.keys(obj)
]. Domyślnie tofalse
.depth
null
.colors
false
. Kolory można dostosowywać [… - patrz link].customInspect
false
, toinspect()
funkcje niestandardowe zdefiniowane na kontrolowanych obiektach nie będą wywoływane. Domyślnie totrue
.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.źródło
console.dir(...)
bez wykonywania całego pisania:show = (v, depth=null)=> console.dir(v,{depth:depth})
a następnie wywołanie jej w ten sposóbshow(variable)
lubshow(variable, depth=1)
.Inną prostą metodą jest konwersja do formatu json
źródło
utils
:)Spróbuj tego:
źródło
Od wersji Node.js 6.4.0 można to elegancko rozwiązać za pomocą
util.inspect.defaultOptions
:źródło
może
console.dir
to wszystko czego potrzebujesz.http://nodejs.org/api/console.html#console_console_dir_obj
użyj opcji util, jeśli potrzebujesz większej kontroli.
źródło
options
obiektu doutil.inspect
.util.inspect()
.Możesz też zrobić
źródło
Dobrym sposobem na sprawdzenie obiektów jest użycie opcji node --inspect w Chrome DevTools for Node .
Otwórz
chrome://inspect/#devices
w chrome i kliknij Otwórz dedykowane narzędzia DevTools dla węzłaTeraz każdy zalogowany obiekt jest dostępny w inspektorze, podobnie jak zwykły JS działający w chrome.
Nie ma potrzeby ponownego otwierania inspektora, łączy się on z węzłem automatycznie, gdy tylko węzeł się uruchomi lub uruchomi ponownie. Zarówno --inspect, jak i Chrome DevTools dla Node mogą nie być dostępne w starszych wersjach Node i Chrome.
źródło
node.exe --inspect index.js
Oba te zastosowania można zastosować:
źródło
Myślę, że może ci się to przydać.
Jak wspomniano w tej odpowiedzi :
źródło
Możesz po prostu dodać
inspect()
metodę do swojego obiektu, która zastąpi reprezentację obiektu wconsole.log
wiadomościachna przykład:
wtedy twój obiekt będzie reprezentowany zgodnie z wymaganiami zarówno w pliku console.log, jak i powłoce węzła
źródło
Prostą sztuczką byłoby użycie
debug
modułu, aby dodaćDEBUG_DEPTH=null
jako zmienną środowiskową podczas uruchamiania skryptuDawny.
DEBUG = * DEBUG_DEPTH = null node index.js
W twoim kodzie
źródło
Węzeł REPL ma wbudowane rozwiązanie do przesłonięcia sposobu wyświetlania obiektów, patrz tutaj .
źródło
Najłatwiejsza opcja:
źródło
myObject
na dowolnej głębokościJSON.stringify ()
Idealne do głębokiej inspekcji obiektów danych. To podejście działa na zagnieżdżonych tablicach i zagnieżdżonych obiektach z tablicami.
źródło