cha*_*umQ 17 javascript node.js
为什么{} || []无效?
$ echo '[] || {}' | node # this works
$ echo '{} || []' | node # but this doesn't
[stdin]:1
{} || []
^^
SyntaxError: Unexpected token ||
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Object.<anonymous> ([stdin]-wrapper:6:22)
at Module._compile (module.js:652:30)
at evalScript (bootstrap_node.js:466:27)
at Socket.<anonymous> (bootstrap_node.js:237:15)
at emitNone (events.js:111:20)
at Socket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
$ echo '({}) || []' | node # unless you do this
Run Code Online (Sandbox Code Playgroud)
Poi*_*nty 21
当语句以...开头时{,解析器假定它是块语句的开头.在这种情况下{},它是一个空块语句.所以就好像你有
{
// no code here
}
|| []
Run Code Online (Sandbox Code Playgroud)
并且||不能发表声明.
确实有效的[] || {}是明确的,因为第一个令牌的语句[只能是表达式语句.
结束语{}中( )表示该语句的第一个标志是(,没有{.该(令牌不能启动任何形式不是表达的其他语句(虽然它确实有一点含糊,因为它可以启动一个匿名的"胖箭头"的功能,这仍然是一个表达式解析器只是有后来的歧义).
注意:各种调试环境(如浏览器控制台和Node命令行"控制台")的实现会对这种语法产生影响.为了简单起见,这些工具会接受您键入的代码,并以某种方式"包装"它,以便可以在您键入时逐个语句地交互式地解析和评估它.不幸的是,这个过程会引入异常,这样你在控制台中尝试的东西可能在那里工作正常,但是当你在一个真正的代码块中尝试它时却不行.
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |