Node.js: process.argv vs. process.ARGV

11
我注意到Node定义了process.argvprocess.ARGV(大写)。后者未在文档中提到,在我遇到的每种情况下,它都是相同的对象。 ARGV只是一个历史遗留问题,还是有用途的呢?
2个回答

10

process.ARGVv0.5.10版本以来已被完全删除


7
无法对提交的代码进行争论。 :) - Trevor Burnham

4

它们是相同的:

node.cc

// process.argv
Local<Array> arguments = Array::New(argc - option_end_index + 1);
arguments->Set(Integer::New(0), String::New(argv[0]));
for (j = 1, i = option_end_index; i < argc; j++, i++) {
  Local<String> arg = String::New(argv[i]);
  arguments->Set(Integer::New(j), arg);
}
// assign it
process->Set(String::NewSymbol("ARGV"), arguments);
process->Set(String::NewSymbol("argv"), arguments);

编辑(基于进一步的问题):

只有一个人能够告诉你这件事情确切的答案(即作者本人)。你可能可以在IRC(irc.freenode.net #node.js)上找到他。

从其他符号中看,我猜这个 ENV 变量是为了保持一致性而添加的。 argvenv 似乎是仅有的两个既有小写版本也有大写版本的变量。然而,ENVenv 稍有不同。也许作者认为 argvARGV 可能会像 envENV 那样有所不同?


1
Node会在每次你使用process.ENV时警告你:请使用process.env而不是process.ENV。据推测,这些变量已经被弃用但为了向后兼容性而保留。 - Ricardo Tomasi
@ricardo:很酷,我没有深入研究过源代码... +1 :) - Demian Brecht
我刚想起来看到那条消息 :) 结果发现它们真的已经被弃用了:http://github.com/joyent/node/pull/372 - Ricardo Tomasi
1
这很容易让人感到困惑,特别是如果你曾经使用过spidermonkey。gjs使用的是ARGV而不是process.argv。有趣的事实。 - BlackVegetable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接