Jaka jest różnica między „process.stdout.write” a „console.log” w node.js?
EDYCJA: Użycie console.log dla zmiennej pokazało wiele nieczytelnych znaków, natomiast użycie process.stdout.write pokazało obiekt.
Dlaczego?
javascript
node.js
ajsie
źródło
źródło
Odpowiedzi:
console.log()
wywołaniaprocess.stdout.write
ze sformatowanym wyjściem. Zobaczformat()
implementację w pliku console.js.Obecnie (v0.10.ish):
źródło
console.log()
wydaje się, że dodaje nowy wierszPatrząc na dokumenty Node najwyraźniej console.log to po prostu process.stdout.write z podziałem linii na końcu:
Źródło: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
źródło
Wiem, że to jest bardzo stare pytanie, ale nie widzę ktoś mówi o głównej różnicy między
process.stdout.write
iconsole.log
a ja po prostu chce go wymienić.Jak zauważyli Mauvis Leford i TK-421 , znak
console.log
dodajeline-break
znak na końcu linii (\n
), ale to nie wszystko, co robi.Kod nie zmienił się od co najmniej
0.10.X
wersji, a teraz mamy5.X
wersję.Oto kod:
Jak widać, jest część, która mówi
.apply(this, arguments)
i która ma duży wpływ na funkcjonalność. Łatwiej to wyjaśnić przykładami:process.stdout.write
ma bardzo podstawową funkcjonalność, możesz po prostu coś tam napisać, na przykład:Jeśli nie umieścisz linii końca na końcu, po łańcuchu otrzymasz dziwny znak, coś takiego:
(Myślę, że to oznacza coś w rodzaju „końca programu”, więc zobaczysz to tylko wtedy, gdy
process.stdout.write
był używany na końcu pliku i nie dodałeś linii podziału)Z drugiej strony
console.log
można zrobić więcej.Możesz użyć tego w ten sam sposób
console.log("Hello World"); //You don't need the break line here because it was already formated
a także ta dziwna postać zniknęłaMożesz napisać więcej niż jeden ciąg
console.log("Hello", "World");
Możesz tworzyć skojarzenia
console.log("Hello %s", "World") //Useful when "World" is inside a variable
I o to chodzi, że dzięki tej
util.format.apply
części została dodana dodatkowa funkcjonalność (mogłem dużo mówić o tym, co to dokładnie robi, ale rozumiesz, o czym więcej możesz przeczytać tutaj ).Mam nadzieję, że ktoś uzna te informacje za przydatne.
źródło
stdout.write
i jak unikać%
%
na koniec, po prostu dzwoniącprocess.stdout.write('\n');
na końcu mojej pętli (jeśli masz na przykład)%
to po prostu sposób powiedzenia powłoki, że na końcu pliku nie ma nowej linii.%
w plikuJedną z dużych różnic, o której nie wspomniano, jest to, że process.stdout przyjmuje tylko łańcuchy jako argumenty (mogą być również strumieniami potokowymi), podczas gdy console.log przyjmuje dowolny typ danych JavaScript.
na przykład:
źródło
Inną ważną różnicą w tym kontekście byłoby
process.stdout.clearLine()
iprocess.stdout.cursorTo(0)
.Byłoby to przydatne, jeśli chcesz pokazać procent pobierania lub przetwarzania w jednym wierszu. Jeśli użyjesz funkcji clearLine (), kursorTo () z
console.log()
nią nie działa, ponieważ dodaje \ n również do tekstu. Wypróbuj ten przykład:źródło
Właśnie zauważyłem coś podczas badania tego po uzyskaniu pomocy w https.request dla metody post. Pomyślałem, że podzielę się pewnym wkładem, aby pomóc zrozumieć.
process.stdout.write
nie dodaje nowej linii, podczas gdyconsole.log
robi, jak inni wspominali. Ale jest też coś, co łatwiej wyjaśnić przykładami.process.stdout.write(d);
wydrukuje dane poprawnie bez nowej linii. Jednakconsole.log(d)
wydrukuje nowy wiersz, ale dane nie będą wyświetlane poprawnie, podając to<Buffer 12 34 56...
na przykład.Aby
console.log(d)
poprawnie wyświetlić informacje, musiałbym to zrobić.Więc w zasadzie:
process.stdout.write
ciągle drukuje informacje podczas pobierania danych i nie dodaje nowego wiersza.console.log
wypisuje informacje uzyskane w momencie wyszukiwania i dodaje nową linię.To najlepszy sposób, żeby to wyjaśnić.
źródło
Prosta różnica polega na tym, że: metody console.log () automatycznie dodają nowy znak wiersza. Oznacza to, że jeśli przeglądamy i drukujemy wynik, każdy wynik jest drukowany w nowej linii.
Metody process.stdout.write () nie dodają nowego znaku linii. przydatne do drukowania wzorów.
źródło
Console.log implement process.sdout.write, process.sdout.write to bufor / strumień, który będzie bezpośrednio wysyłany do konsoli.
Według mojego puglin serverline :
console = new Console(consoleOptions)
można przerobić klasę Console z własnym readline systemu.Możesz zobaczyć źródło kodu console.log:
Zobacz więcej :
źródło