Was ist der Unterschied zwischen "process.stdout.write" und "console.log" in node.js?
EDIT: Die Verwendung von console.log für eine Variable zeigte eine Menge unlesbarer Zeichen, während process.stdout.write ein Objekt anzeigte.
Warum ist das so?
Was ist der Unterschied zwischen "process.stdout.write" und "console.log" in node.js?
EDIT: Die Verwendung von console.log für eine Variable zeigte eine Menge unlesbarer Zeichen, während process.stdout.write ein Objekt anzeigte.
Warum ist das so?
Ein Blick in die Node-Dokumente zeigt, dass console.log einfach process.stdout.write mit einem Zeilenumbruch am Ende ist:
console.log = function (d) {
process.stdout.write(d + '\n');
};
Quelle: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
Ich weiß, dass diese Frage sehr alt ist, aber ich habe noch niemanden gesehen, der über den Hauptunterschied zwischen process.stdout.write
y console.log
und ich möchte es nur erwähnen.
Als Mauvis Leford y TK-421 darauf hingewiesen, dass die console.log
fügt eine line-break
Zeichen am Ende der Zeile ( \n
), aber das ist nicht alles, was es tut.
Der Code hat sich seit mindestens 0.10.X
Version und jetzt haben wir eine 5.X
Version.
Aquí ist der Code:
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
Wie Sie sehen können, gibt es einen Teil, der besagt .apply(this, arguments)
und das macht einen großen Unterschied in der Funktionalität. Es ist einfacher, dies anhand von Beispielen zu erklären:
process.stdout.write
hat eine sehr einfache Funktionalität, man kann dort einfach etwas hineinschreiben, etwa so:
process.stdout.write("Hello World\n");
Wenn Sie den Zeilenumbruch am Ende nicht einfügen, erhalten Sie ein seltsames Zeichen nach der Zeichenkette, etwa so:
process.stdout.write("Hello World"); //Hello World%
(Ich glaube, das bedeutet so viel wie "das Ende des Programms", Sie werden es also nur sehen, wenn Sie process.stdout.write
am Ende Ihrer Datei verwendet wurde und Sie die Umbruchlinie nicht hinzugefügt haben)
Andererseits, console.log
kann mehr tun.
Sie können es auf dieselbe Weise verwenden
console.log("Hello World"); //You don't need the break line here because it was already formated
und auch diese seltsame Figur ist verschwunden
Sie können mehr als eine Zeichenkette schreiben
console.log("Hello", "World");
Sie können Assoziationen herstellen
console.log("Hello %s", "World") //Useful when "World" is inside a variable
Und das war's, diese zusätzliche Funktionalität ist dank der util.format.apply
Teil (ich könnte viel darüber erzählen, was das genau macht, aber Sie verstehen, worauf ich hinaus will. aquí ).
Ich hoffe, dass jemand diese Informationen nützlich findet.
Ein großer Unterschied, der noch nicht erwähnt wurde, ist, dass process.stdout nimmt nur Strings als Argumente (können auch Piped Streams sein), während console.log nimmt jeden Javascript-Datentyp an.
z.B.:
// ok
console.log(null)
console.log(undefined)
console.log('hi')
console.log(1)
console.log([1])
console.log({one:1})
console.log(true)
console.log(Symbol('mysymbol'))
// any other data type passed as param will throw a TypeError
process.stdout.write('1')
// can also pipe a readable stream (assuming `file.txt` exists)
const fs = require('fs')
fs.createReadStream('file.txt').pipe(process.stdout)
Ein weiterer wichtiger Unterschied wäre in diesem Zusammenhang mit process.stdout.clearLine()
y process.stdout.cursorTo(0)
.
Dies wäre nützlich, wenn Sie den Prozentsatz des Herunterladens oder der Verarbeitung in nur einer Zeile anzeigen möchten. Wenn Sie clearLine(), cursorTo() mit console.log()
funktioniert nicht, weil es auch an die \n zum Text. Probieren Sie einfach dieses Beispiel aus:
var totalTime = 5000;
var waitInterval = totalTime / 10;
var currentInterval = 0;
function showPercentage(percentage){
process.stdout.clearLine()
process.stdout.cursorTo(0)
console.log(`Processing ${percentage}%...` ) // Replace this line with process.stdout.write(`Processing ${percentage}%...`)
}
var interval = setInterval(function(){
currentInterval += waitInterval
showPercentage((currentInterval / totalTime) * 100)
}, waitInterval)
setTimeout(function(){
clearInterval(interval)
}, totalTime + 100)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.