首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >{} || []不是有效的JavaScript

{} || []不是有效的JavaScript
EN

Stack Overflow用户
提问于 2018-09-22 02:07:54
回答 1查看 839关注 0票数 17

为什么{} || []无效?

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-22 02:09:24

当语句以{开头时,解析器假定它是block语句的开头。在{}的情况下,它是一个空块语句。所以这就好像你有

代码语言:javascript
复制
{
  // no code here
}
|| []

并且||不能启动语句。

可以工作的语句[] || {}是明确的,因为第一个标记为[的语句只能是表达式语句。

{}包装在( )中意味着语句的第一个标记是(,而不是{(标记不能启动除表达式之外的任何形式的语句(尽管它确实有一点不明确,因为它可以启动一个匿名的“胖箭头”函数;这仍然是一个表达式,解析器只需在以后消除它的歧义)。

注意:各种调试环境的实现,如浏览器控制台和节点命令行“控制台”,都会对这种语法产生影响。为了简单起见,这类工具接受您键入的代码,并以某种方式“包装”它,以便可以在您键入时以交互方式对其进行解析和计算。不幸的是,该过程可能会引入异常,因此您在控制台中尝试的东西可能在控制台中运行良好,但当您在真实的代码块中尝试它时却无法正常工作。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52449027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档