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

时间:2016-12-19 10:06:25

标签: javascript node.js

这是我学习Node的第一天,我试图实现一个程序,该程序将总和返回到N个数字,其中N是输入。我使用包管理器(v0.10.25)安装了Node的Ubuntu 14.04。这是我的代码

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执行代码会返回正确的答案。我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

process.argv[2]将是字符串。当您将*与字符串一起使用时,它会隐式转换为数字,但是当其中一个操作数是字符串时使用+时,它就是字符串连接。< / p>

因此,例如,如果您在命令行上给出了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]);
// ------------^^^^^^^^----------------^

取决于您的需求。 This answer简要介绍了这些差异。

答案 1 :(得分:0)

process.argv个参数以字符串形式出现。

因此,您可以通过设置myNumber来获得相同的结果:

var myNumber = "5";

相反,您需要使用parseInt将字符串解析为整数。或者其他parse*函数,如果你想支持浮点数等。

答案 2 :(得分:0)

process.argv[2]被解释为字符串。

因此,'5' * ('5'+1) * 0.5变为'5' * '51' * 0.5变为5 * 51 * 0.5(即127.5)。

确保将其转换为数字!

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