我开始使用一些现代的Javascript,我决定使用Nodejs,因为它似乎是目前桌面上最流行的JS框架,我不明白为什么我的代码不起作用我得到的相关错误消息。
考虑这个片段
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');
任何人都可以解释发生了什么?
答案 0 :(得分:8)
.write()
的第一个参数应为String
或Buffer
。 <{1}}是不被允许的。
Number
process.stdout.write(func(1,2,3,a).toString());
加法运算符(process.stdout.write(String(func(1,2,3,a)));
)在连接a + b
时隐式执行此转换。
答案 1 :(得分:2)
You can only write strings or Buffer
s to sockets。 (stdout
是一个套接字。)由于整数不是字符串或缓冲区,因此尝试将其写入stdout
是一个错误。
将字符串连接到整数会将整数强制(转换)为字符串,这就是它工作的原因。您可以连接空字符串(i+''
)或调用整数的toString
方法。
答案 2 :(得分:0)
var writeBuffer = Buffer(1);
writeBuffer[0] = 1; //Value to be written
process.stdout.write(writeBuffer);