Node.js REPL中的"_"(下划线)符号是什么意思?

Jul*_*ing 31 javascript node.js

当我注意到这件事时,我正在使用一些代码在Node.js中玩:

> 'hello world'.padEnd(20);
'hello world         '
> 'hello world'.padEnd(20, _);
'hello worldhello wor'
Run Code Online (Sandbox Code Playgroud)

下划线符号在这里做什么?

> _
'hello worldhello wor'
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 28

_ 在节点控制台中返回最后一个表达式的结果.

> 1 + 2
3
> _
3
Run Code Online (Sandbox Code Playgroud)

  • 这种情况只发生在REPL(交互式控制台)中,并且[完全记录](https://nodejs.org/api/repl.html#repl_assignment_of_the_underscore_variable).在普通代码中,下划线只是另一个变量标识符. (19认同)
  • 哇,这是一个多么出乎意料的行为. (12认同)
  • @canon,我曾经有一位教授,在用方程填充板后,说"显然 - "并开始填写第二块板.我举起手来."高曼博士,你确定这很明显吗?" 这阻止了他.他盯着自己的工作沉默了一会儿."是的,"他总结道."很明显." 当我在侧边栏中看到这个问题时,我想,"这可能意味着最后一个表达的结果." (8认同)
  • 这并不是意料之外的事实 - 事实上,它甚至不是node.js甚至JavaScript的独特之处.它位于Python和Ruby交互式环境中,可能还有更多我没有使用过的语言. (6认同)
  • "这并非意料之外" - 所有的印记都非常出乎意料.例如,如果它是`__previousResult__`那么这个问题永远不会被问到. (4认同)

Kar*_*lak 11

_ symbol返回REPL节点控制台中最后记录的表达式的结果:

> 2 * 2
4
> _
4
Run Code Online (Sandbox Code Playgroud)

如文档中所述,在6.x及更高版本的节点中,可以通过将value设置为_显式来禁用此行为:

> [ 'a', 'b', 'c' ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
Expression assignment to _ now disabled.
4
> 1 + 1
2
> _
4
Run Code Online (Sandbox Code Playgroud)

但在旧版本中,该功能不起作用:

> [ 'a', 'b', 'c' ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
4
> 1 + 1
2
> _
2
Run Code Online (Sandbox Code Playgroud)