有人可以解释一下“process.argv”在node.js中的含义吗?

时间:2014-03-06 03:00:17

标签: node.js

我正在学习node.js,我只是很好奇这是什么意思,我正在学习,你能告诉我为什么这段代码会做它的作用:

var result = 0;

  for (var i = 2; i < process.argv.length; i++){
    result += Number(process.argv[i]);
}
  console.log(result);

我知道它会添加您添加到命令行的数字,但为什么“i”以2开头?我理解for循环,所以你不必详细了解它。

提前非常感谢你。

7 个答案:

答案 0 :(得分:50)

你可以用console.log(process.argv)解决这个问题。

它从2开始,因为process.argv包含整个命令行调用:

process.argv = ['node', 'yourscript.js', ...]

元素01不是你所谓的“参数”,而是它们的存在。

答案 1 :(得分:25)

它以2开头,因为代码将以

运行
node myprogram.js firstarg secondarg

所以

process.argv[0] == "node"

process.argv[1] == "myprogram.js"

process.argv[2] == "firstarg"

Online docs

答案 2 :(得分:5)

您的程序打印提供给节点脚本的“命令行参数”的数值之和。

例如:

$ /usr/local/bin/node ./sum-process-argv.js 1 2 3
6

来自Node.js API documentation for process.argv

  

包含命令行参数的数组。第一个元素是'node',第二个元素是JavaScript文件的名称。下一个元素将是任何其他命令行参数。

在上面的例子中,这些值是:

process.argv[0] == '/usr/local/bin/node'
process.argv[1] == '/Users/maerics/src/js/sum-process-argv.js'
process.argv[2] == '1'
process.argv[3] == '2'
process.argv[4] == '3'

另请参阅JavaScript的Number(...) function/contructor

答案 3 :(得分:2)

在node.js中,命令行参数始终存储在数组中。在该数组中,第一个元素是我们引用的节点命令,因为我们使用单词“node”开始命令行。第二个元素是我们引用的javascript(JS)文件,它经常出现在node命令之后。

我们知道,在JS数组的第一个元素从零开始,第二个元素是1,它变为2,3,4和on。让我们将这个数组命名为process.argv并添加命令行参数x和y。然后,这就是我们如何称呼这些元素:

var process.argv = ['node', 'file.js', ‘x’, ‘y’];
var process.argv [0] = node;
var process.argv [1]= file.js;
var process.argv[2] = x;
var process.argv[3] = y;

简而言之,元素0和1是node.js的原生,我们在编写任何命令行参数时都不使用它们。这就是我们忽略0和1并始终从2开始的原因。

如果我们想循环遍历命令行参数,那么我们必须从2开始。这是我们用于循环的内容。

for (i = 2; i < process.argv.length; i++){
console.log(process.argv[i]);
}

答案 4 :(得分:1)

执行时如下:

node code.js <argument> <argument>....

它考虑了所有命令行调用。对于process.argv[]数组,将有["node","code.js","<argument>",...]
因为你的参数在数组中以索引2开头

答案 5 :(得分:0)

我的答案不是关于process.argv的工作原理-因为这里有很多答案,而是关于如何使用array destructuring syntax获取值的问题。

例如,如果您使用以下命令运行脚本:

node app.js arthur 35

您可以像这样以更具可读性的方式获取这些值:

const [node, script, name, age] = process.argv;

console.log(node); // node
console.log(script); // app.js
console.log(name); // arthur
console.log(age); // 35

您可以省略process.argv的第一个和第二个地方,而仅与nameage在一起:

const [, , name, age] = process.argv;

如果要将所有参数都放在数组中,则可以使用rest syntax进行操作,即收集多个元素并将其压缩为单个元素,如下所示:

const [node, script, ...params] = process.argv;

console.log(node); // node
console.log(script); // app.js
console.log(params); // [ 'arthur', '35' ]

,当然,您可以省略process.argv的第一个和第二个地方,而只使用 params

const [, , ...params] = process.argv;

答案 6 :(得分:-2)

process.agrv [i] - 基本上循环执行文件时在终端中传递的命令行参数。 例如 - 如果您将文件作为
运行 $ node prog.js 1 2 3,然后是process.argv [0] = 1等等..