stdout用Nodejs写

use*_*710 4 javascript node.js

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

考虑一下这个片段

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

一些废话后添加一个+ '\n'使这个代码工作

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

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

Jon*_*ski 8

给出的第一个论点.write()预计是a StringBuffer.Numbers是不允许的.

process.stdout.write(func(1,2,3,a).toString());
Run Code Online (Sandbox Code Playgroud)
process.stdout.write(String(func(1,2,3,a)));
Run Code Online (Sandbox Code Playgroud)

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

  • @ user2485710节点的流以Buffers为中心,这是表示字节串/数组/等的方式.它也允许使用字符串,因为它们可以很容易地转换为Buffers - `if(typeof chunk ==='string')chunk = new Buffer(chunk);`. (2认同)