栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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开发者工具则将其视为“语句”。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402607.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号