AJF*_*mar 5 javascript syntax node.js
当我看到这个表达式时,我正在寻找javascript问题的解决方案,即将字符串解析为其组成名称,运算符和括号:
return accept(")") ? _|_ : e;
Run Code Online (Sandbox Code Playgroud)
那是什么_|_?这是使用节点的_功能吗?我找了文档,但没找到任何文件.
当我自己尝试使用它时,会发生这种情况:
> 5
5
> true ? _|_ : 0
ReferenceError: _ is not defined
at eval:1:1
at eval
at n.<anonymous>
Run Code Online (Sandbox Code Playgroud)
作为澄清,该变量_未在代码中的任何位置定义.
这是在Node v8.1.3上运行的,但也适用于chrome本机浏览器JS.
这是代码:
function tokenise(string) {
const tokens = string.match( /[a-z]+|\(|\)|[!#$%&*+\-\/<=>@^_.,;]+/gi ) || [];
const accept = s => s===tokens[0] && tokens.shift() ;
const unaccept = s => s!==tokens[0] && tokens.shift() ;
const singles = (e) => ( e = unaccept(")") ) ? [ e, ...brackets() ] : [] ;
const brackets = (e) => accept("(") ? ( e = brackets(), accept(")") || _|_ , [ e, ...brackets() ] ) : singles() ;
try { let e = brackets(); return accept(")") ? _|_ : e ; }
catch(_) { return null; }
}
Run Code Online (Sandbox Code Playgroud)
_|_在JavaScript中没有特殊含义,它只是一个|(按位OR)表达式,_在其两侧都有标识符.
该代码检查调用的结果accept,如果它是真的,则返回|操作的结果; 如果不是,则返回值e.
这是使用节点的
_功能吗?
_在Node代码中并不特殊.在REPL(仅)中,它是一个接收最近评估表达式结果的变量; 这里详细介绍.
作为澄清,该变量
_未在代码中的任何位置定义.
这意味着如果accept(")")返回一个truthy值,代码将抛出一个ReferenceError因为_是一个未声明的标识符.如果那是作者的意图,根本不需要|操作员,但在现在删除的答案中,georg指出他们可能已经_|_尝试表达底部的数学概念("计算永远不会成功完成" "),符号为?.在任何情况下,作者似乎都使用它来强制表达式上下文中的异常(因为它throw是一个语句;但有人说在某些时候可能在表达式上下文中允许它).