回答:
console.log()process.stdout.writeフォーマットされた出力で呼び出します。format()実装についてはconsole.jsを参照してください。
現在(v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
console.log()改行を追加するように見えることも言及する価値があります
Nodeのドキュメントを見ると、console.logは単にprocess.stdout.writeであり、最後に改行があります。
console.log = function (d) {
process.stdout.write(d + '\n');
};
ソース:http : //nodejs.org/docs/v0.3.1/api/process.html#process.stdout
私は、これは非常に古い質問ですが、私は誰もが主な違いについて話を見ていなかった知っているprocess.stdout.writeとconsole.log、私はちょうどそれを言及したいと思います。
以下のようMauvis LefordとTK-421は指摘し、console.log追加しますline-break(行の末尾に文字を\n)それはそれが何をするか、すべてではありません。
コードは少なくとも0.10.Xバージョン以降変更されておらず、現在は5.Xバージョンがあります。
これがコードです:
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
ご覧のとおり.apply(this, arguments)、機能性に大きな違いをもたらす部分があります。例でそれを説明する方が簡単です:
process.stdout.write 非常に基本的な機能があり、次のようにそこに何かを書くだけです。
process.stdout.write("Hello World\n");
改行を最後に置かないと、文字列の後に次のような奇妙な文字が表示されます。
process.stdout.write("Hello World"); //Hello World%
(それは「プログラムの終わり」のようなものを意味すると思うのでprocess.stdout.write、ファイルの終わりで使用され、ブレークラインを追加しなかった場合にのみ表示されます)
一方、console.logより多くのことができます。
同じように使えます
console.log("Hello World"); //You don't need the break line here because it was already formated そしてまた、その奇妙な性格は消えました
複数の文字列を書き込むことができます
console.log("Hello", "World");
関連付けを行うことができます
console.log("Hello %s", "World") //Useful when "World" is inside a variable
util.format.applyパートのおかげで、追加された機能が提供されます(これが正確に何をするかについては多くのことを話すことができますが、私の理解はここにあります)。
この情報がお役に立てば幸いです。
stdout.writeと取得を回避する方法を説明した場合にも非常に役立ちます%
%呼び出すだけで、最後に到達する問題を解決しましたprocess.stdout.write('\n');
%は、シェルがファイルの最後に改行がないことを示す方法にすぎません。
%です
言及されていない大きな違いの1つは、process.stdoutが文字列のみを引数として取る(パイプストリームにすることもできる)一方で、console.logは任意のJavascriptデータ型を取ることです。
例えば:
// 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)
このコンテキストでのもう1つの重要な違いは、process.stdout.clearLine()およびprocess.stdout.cursorTo(0)です。
これは、ダウンロードまたは処理の割合を1行で表示する場合に便利です。clearLine()を使用する場合、cursorTo()を使用するconsole.log()と、テキストに\ nが追加されるため、機能しません。この例を試してください:
var waitInterval = 500;
var totalTime = 5000;
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);
postメソッドのhttps.requestのヘルプを取得した後、これを調査しているときに何かに気づきました。理解を助けるためにいくつかの情報を共有すると思いました。
process.stdout.writeconsole.log他の人が述べたように、追加する間に新しい行を追加しません。しかし、例で説明する方が簡単なこともあります。
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write(d);改行なしでデータを適切に印刷します。ただしconsole.log(d)、新しい行が出力されますが、データが正しく表示されない<Buffer 12 34 56...ため、たとえば次のようになります。
作るためにconsole.log(d)情報が正しく表示され、私はこれを行う必要があります。
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
だから基本的に:
process.stdout.write 取得されるデータとして情報を継続的に出力し、新しい行を追加しません。
console.log 検索時に取得した情報を出力し、新しい行を追加します。
それが私が説明できる最良の方法です。
Console.logはprocess.sdout.writeを実装します。process.sdout.writeは、コンソールに直接出力されるバッファ/ストリームです。
私のパグリンサーバーラインによると:console = new Console(consoleOptions)コンソールクラスを独自のreadlineシステムで書き換えることができます。
console.logのコードソースを確認できます。
続きを見る :