为什么{} || []
无效?
$ 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
发布于 2018-09-22 02:09:24
当语句以{
开头时,解析器假定它是block语句的开头。在{}
的情况下,它是一个空块语句。所以这就好像你有
{
// no code here
}
|| []
并且||
不能启动语句。
可以工作的语句[] || {}
是明确的,因为第一个标记为[
的语句只能是表达式语句。
将{}
包装在( )
中意味着语句的第一个标记是(
,而不是{
。(
标记不能启动除表达式之外的任何形式的语句(尽管它确实有一点不明确,因为它可以启动一个匿名的“胖箭头”函数;这仍然是一个表达式,解析器只需在以后消除它的歧义)。
注意:各种调试环境的实现,如浏览器控制台和节点命令行“控制台”,都会对这种语法产生影响。为了简单起见,这类工具接受您键入的代码,并以某种方式“包装”它,以便可以在您键入时以交互方式对其进行解析和计算。不幸的是,该过程可能会引入异常,因此您在控制台中尝试的东西可能在控制台中运行良好,但当您在真实的代码块中尝试它时却无法正常工作。
https://stackoverflow.com/questions/52449027
复制相似问题