node.js中“process.stdout.write”和“console.log”之间的区别是什么?node.js中“process.stdout.write”和“console.log”的区别?
编辑:使用console.log为变量显示了很多不可读的字符,同时使用process.stdout.write显示一个对象。
这是为什么?
node.js中“process.stdout.write”和“console.log”之间的区别是什么?node.js中“process.stdout.write”和“console.log”的区别?
编辑:使用console.log为变量显示了很多不可读的字符,同时使用process.stdout.write显示一个对象。
这是为什么?
console.log()
调用process.stdout.write
格式化输出。有关实现,请参阅console.js中的format()
。
目前(v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
望着节点文档显然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
对于后来出现的人来说,请注意,v0.3.1是很久以前的事情,并且自那以后发生了变化。 :) – 2015-02-25 04:17:58
...不。刚刚查看了v0.9.9文档,console.log仍然是process.stdout.write的别名,并带有换行符。请在评论之前做你的研究。 http://nodejs.org/docs/v0.9.9/api/process.html#process.stdout – 2015-02-25 17:53:05
我知道这是一个非常古老的问题,但我没有看到任何人谈论process.stdout.write
和console.log
之间的主要区别,我只是想给我注意它。
由于Mauvis Leford和TK-421指出的,console.log
在行(\n
)的末尾添加一个line-break
字符,但还不是全部它做什么。
自从至少有0.10.X
版本以来,代码没有改变,现在我们有一个5.X
版本。
Here是代码:
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
是在使用你的文件的结尾,你没有' t加分行)
另一方面,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
部分(我可以讲了很多关于究竟这样做,但你明白我的意思,你可以阅读更多here)。
我希望有人发现这个信息有用。
没有提到的一个很大的区别是process.stdout只将字符串作为参数(也可以是管道流),而console.log采用任何Javascript数据类型。
e.g:
// 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)
我刚刚发现了一些,同时帮助您使用https.request为POST方法后,研究这个。以为我分享一些帮助理解的意见。
process.stdout.write
不会添加新行,而console.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
打印检索点获得的信息并添加新行。
这是我能解释它的最好方法。
这方面的另一个重要区别是process.stdout.clearLine()
和process.stdout.cursorTo(0)
。
如果您想在唯一一行中显示下载或处理的百分比,这将非常有用。如果使用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);
你能提供一个例子吗? console.log()使用格式化输出调用process.stdout.write。有关实现,请参阅console.js中的format()。 – 2011-02-12 11:47:53
发布它作为答案=) – ajsie 2011-02-13 03:34:46