标准输出写入Nodejs

我开始使用一些现代的Javascript,我决定使用Nodejs,因为它似乎是目前桌面上JS最stream行的框架,我不明白为什么我的代码不工作和相关的错误我得到的消息。

考虑这个片段

var a = 5; var func = function(){return arguments.length;}; process.stdout.write(+func(1,2,3,a)); 

它不起作用,它会生成以下错误消息

 net.js:612 throw new TypeError('invalid data'); ^ TypeError: invalid data at WriteStream.Socket.write (net.js:612:11) at Object.<anonymous> (var_1.js:3:16) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3 

我是C / C ++程序员,这对我来说绝对是神秘的,而且我在调用func之前使用了一个+来确保结果是一个integer ,所以为什么write是抱怨呢?

经过一些无意义的添加+ '\n'使这个代码工作

 var a = 5; var func = function(){return arguments.length;}; process.stdout.write(+func(1,2,3,a) + '\n'); 

任何人都可以解释发生了什么?

.write()的第一个参数应该是一个String或者BufferNumber是不允许的。

 process.stdout.write(func(1,2,3,a).toString()); 
 process.stdout.write(String(func(1,2,3,a))); 

加法运算符( a + b )在连接'\n'时隐式执行此转换。

您只能将string或Buffer写入套接字 。 ( stdout是一个套接字。)作为一个整数不是一个string或缓冲区,试图写入到stdout是一个错误。

将一个string连接成一个整数将整数转换成一个string,这就是它工作的原因。 你可以连接一个空string( i+'' )或者调用整数的toString方法。

 var writeBuffer = Buffer(1); writeBuffer[0] = 1; //Value to be written process.stdout.write(writeBuffer);