JS何时将{}解释为一个空块而不是一个空对象?

JS何时将{}解释为一个空块而不是一个空对象?,第1张

JS何时将{}解释为一个空块而不是一个空对象?

让我们看一下语言语法,对吧?第12节,声明:

Statement :    Block    VariableStatement    EmptyStatement    expressionStatement    ...lots of other stuff...

这是一种非常奇特的说法,一个语句可以是一个块,一个变量语句,一个空语句,一个表达式语句或许多其他内容。请注意,第一个选项是“阻止”:

Block :    { StatementList(opt) }StatementList :    Statement    StatementList Statement

同样,这是一种怪异的说法,即一个块是a

{
,可选地后面跟着一堆语句,然后是a
}

这就是您在示例中看到的内容:在Javascript解析器认为您拥有的可能是对象文字(在

expressionStatement
“声明”可能位于的第4项下定义)之前,它首先认为您拥有“阻止” ‘。

编辑:如果需要,您可以在Javascript引擎的源代码中看到它:

  • 在Chrome浏览器的Javascript引擎V8中,我们进入Parser::ParseStatement。它检查的第一件事是我们是否在上
    {
    ,如果存在,则将其解析为块。
  • 在Firefox的Javascript引擎SpiderMonkey中,我们从Parser::statement到再次看到第一个检查是针对a {并将其解析为一个块语句。
    关于第二个问题,这个问题已经详细介绍了。总结一下:Node.js将您的输入视为表达式(因此它不能是“块”),而Firebug / Chrome开发者工具则将其视为“语句”。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5011568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存