【问题标题】:Could someone explain what "process.argv" means in node.js please?有人可以解释一下 node.js 中的“process.argv”是什么意思吗?
【发布时间】:2014-04-08 11:15:06
【问题描述】:

我目前正在学习 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 循环,因此您不必详细说明。

非常感谢您。

【问题讨论】:

标签: node.js


【解决方案1】:

它以 2 开头,因为代码将与运行

node myprogram.js firstarg secondarg

所以

process.argv[0] == "node"

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

process.argv[2] == "firstarg"

Online docs

【讨论】:

    【解决方案2】:

    快速发送console.log(process.argv),您会立即发现问题。

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

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

    元素 01 从脚本的角度来看不是“参数”,但它们适用于调用脚本的 shell。

    【讨论】:

    • 元素 0 和 1 是 shell 的参数。其余的都是 node.js 的参数。
    • @jonschlinkert 不,1 代表节点。
    【解决方案3】:

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

    例如:

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

    来自Node.js API documentation for process.argv

    包含命令行参数的数组。第一个元素是“节点”,第二个元素是 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

    【讨论】:

      【解决方案4】:

      当你像这样执行它时:

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

      它考虑了所有命令行调用。对于 process.argv[] 数组将有 ["node","code.js","&lt;argument&gt;",...]
      因此,您在数组中的参数以索引 2 开始

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          我们知道,JS数组的第一个元素从0开始,第二个元素是1,依次是2、3、4。让我们将此数组命名为 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]);
          }
          

          【讨论】:

            【解决方案7】:

            我的答案不是关于 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 的第一个和第二个位置,只保留您的参数

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-10-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-28
              • 1970-01-01
              • 2019-03-02
              相关资源
              最近更新 更多