在NodeJS中使用process.argv时,行为不一致

这是我第一天学习节点,我试图实现一个程序,返回总和为N个数字,其中N是input。 我使用Ubuntu 14.04,使用软件包pipe理器(v0.10.25)安装了Node。 这是我的代码

var myNumber = process.argv[2] var sumToMyNumber = myNumber*(myNumber+1)*0.5 console.log(sumToMyNumber) 

程序文件是SumToN.js ,输出是

 nodejs SumToN.js 5 // 127.5 

但是,使用var myNumber = 5执行代码将返回正确答案。 我在这里错过了什么?

process.argv[2]将是一个string 。 当你在一个string中使用*时,它被隐含地转换成一个数字,但当你使用+时,当一个操作数是一个string时,它是string连接。

举个例子,如果你在命令行中input了20,那么计算就变成了

 var sumToMyNumber = "20"*("20"+1)*0.5 

这是

 var sumToMyNumber = "20"*("201")*0.5 

这是

 var sumToMyNumber = 20*(201)*0.5 

这是2010年,你可能想要210。

在计算之前将myNumber转换为数字:

 var myNumber = +process.argv[2]; // ------------^ 

要么

 var myNumber = Number(process.argv[2]); // ------------^^^^^^^---------------^ 

要么

 var myNumber = parseFloat(process.argv[2]); // ------------^^^^^^^^^^----------------^ 

要么

 var myNumber = parseInt(process.argv[2]); // ------------^^^^^^^^----------------^ 

取决于你的需求。 这个答案有一个如何这些不同的破败。

process.argv参数以stringforms出现。

所以你会得到相同的结果,通过设置myNumber像这样:

 var myNumber = "5"; 

相反,您需要使用parseInt将stringparsing为整数。 或者其他parse*函数,如果你想支持浮动等

process.argv[2]被解释为一个string。

所以'5' * ('5'+1) * 0.5变成'5' * '51' * 0.5变成5 * 51 * 0.5 (即127.5)。

确保将其转换为数字!

var myNumber = Number(process.argv[2])