我目前正在学习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循环,所以您不必详细介绍它。先谢谢你了。
kgqe7b3p1#
快速执行console.log(process.argv),您将立即发现问题。它从2开始,因为process.argv包含整个命令行调用:
console.log(process.argv)
process.argv
process.argv = ['node', 'yourscript.js', ...]
元素0和1从脚本的Angular 来看不是“参数”,但它们是调用脚本的shell的参数。
0
1
klsxnrf12#
它以2开头,因为代码将使用
node myprogram.js firstarg secondarg
所以
process.argv[0] == "node" process.argv[1] == "myprogram.js" process.argv[2] == "firstarg"
在线文档
67up9zun3#
例如:
$ /usr/local/bin/node ./sum-process-argv.js 1 2 3 6
来自process.argv的Node.js API文档:包含命令行参数的数组。第一个元素是"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'
另请参阅Number(...) function/contructor的JavaScript。
Number(...)
dgtucam14#
在node.js中,命令行参数总是存储在一个数组中,在该数组中,第一个元素是我们所引用的node命令,因为我们以单词“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]); }
jdzmm42g5#
我的答案不是关于process.argv如何工作--因为这里有很多答案--而是关于如何使用array destructuring syntax获得值。例如,如果使用以下命令运行脚本:
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的第一个和第二个 * 位置 *,而只保留name和age:
name
age
const [, , name, age] = process.argv;
如果你想把所有的参数都放在一个数组中,你可以使用rest syntax来实现,它可以收集多个元素并把它们压缩成一个元素,如下所示:
rest syntax
const [node, script, ...params] = process.argv; console.log(node); // node console.log(script); // app.js console.log(params); // [ 'arthur', '35' ]
当然,您可以省略process.argv的第一个和第二个 places,而只保留您的 params:
const [, , ...params] = process.argv;
dtcbnfnu6#
当你这样执行时:
node code.js <argument> <argument>....
它考虑了所有命令行调用。对于process.argv[],阵列将具有["node","code.js","<argument>",...]因此数组中的参数从索引2开始
process.argv[]
["node","code.js","<argument>",...]
vptzau2j7#
app.js
const getHasCli = (prefix, alias = undefined) => { const prefixIndex = process.argv.findIndex( (arg) => arg === prefix || (alias && arg === alias) ); return prefixIndex > 0; }; const getCliData = (prefix, alias = undefined) => { let data = undefined; const prefixIndex = process.argv.findIndex( (arg) => arg === prefix || (alias && arg === alias) ); if (prefixIndex > 0) { const cliData = process.argv[prefixIndex + 1] ?? undefined; if (cliData) { data = cliData.includes("-") ? undefined : cliData; } } return data; }; (async () => { console.log(getCliData("--dir")); console.log(getCliData("--outDir")); console.log(getHasCli("--delete")); console.log(getHasCli("--ignore")); })();
使用示例
node app.js --dir "./public" --delete
返回
./public undefined true false
kiz8lqtg8#
process.agrv[i]-在执行文件时基本上循环通过终端中传递的命令行参数。例如-如果您将文件运行为$节点prog.js 1 2 3,然后处理.argv[0]=1,依此类推。
8条答案
按热度按时间kgqe7b3p1#
快速执行
console.log(process.argv)
,您将立即发现问题。它从2开始,因为
process.argv
包含整个命令行调用:元素
0
和1
从脚本的Angular 来看不是“参数”,但它们是调用脚本的shell的参数。klsxnrf12#
它以2开头,因为代码将使用
所以
在线文档
67up9zun3#
您的程序打印提供给节点脚本的"命令行参数"的数值总和。
例如:
来自
process.argv
的Node.js API文档:包含命令行参数的数组。第一个元素是"node",第二个元素是JavaScript文件的名称。接下来的元素是任何其他命令行参数。
在上述示例中,这些值为:
另请参阅
Number(...)
function/contructor的JavaScript。dgtucam14#
在node.js中,命令行参数总是存储在一个数组中,在该数组中,第一个元素是我们所引用的node命令,因为我们以单词“node”开始命令行,第二个元素是我们所引用的javascript(JS)文件,它通常出现在node命令之后。
我们知道,JS数组的第一个元素从0开始,第二个元素是1,然后是2、3、4等等,我们将这个数组命名为process.argv,并添加命令行参数x和y,然后,我们将这样调用这些元素:
简而言之,元素0和1是node.js的原生元素,我们在编写任何命令行参数时都不会用到它们,这就是为什么我们忽略0和1,总是从2开始。
如果我们想循环遍历命令行参数,同样必须从2开始。下面是我们用于循环的代码。
jdzmm42g5#
我的答案不是关于
process.argv
如何工作--因为这里有很多答案--而是关于如何使用array destructuring syntax
获得值。例如,如果使用以下命令运行脚本:
你可以用一种更易读的方式来得到这些值,就像这样:
您可以省略
process.argv
的第一个和第二个 * 位置 *,而只保留name
和age
:如果你想把所有的参数都放在一个数组中,你可以使用
rest syntax
来实现,它可以收集多个元素并把它们压缩成一个元素,如下所示:当然,您可以省略
process.argv
的第一个和第二个 places,而只保留您的 params:dtcbnfnu6#
当你这样执行时:
它考虑了所有命令行调用。对于
process.argv[]
,阵列将具有["node","code.js","<argument>",...]
因此数组中的参数从索引2开始
vptzau2j7#
app.js
使用示例
返回
kiz8lqtg8#
process.agrv[i]-在执行文件时基本上循环通过终端中传递的命令行参数。例如-如果您将文件运行为
$节点prog.js 1 2 3,然后处理.argv[0]=1,依此类推。