当前位置: 首页 > 面试题库 >

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

华聪
2023-03-14
问题内容

我正在阅读此问题的答案(关于“ wat”视频),它说:

  1. {}+[]
    这被解释为空的代码块,一元加号和空数组。第一部分不执行任何操作,将数组转换为其元素的逗号分隔字符串(用于空数组的空字符串),然后转换为数字(将空字符串转换为0),因此为0。

我目前正在从“权威指南”中学习JS,因此我试图真正理解类似的东西。

我的问题是,JS什么时候决定将其解释{}为空的代码块,而不是空的对象?

另外,我想理解Node.js和Firebug之间存在一些不一致之处。

萤火虫:

用于<code> {} [] </ code>和<code>({} [])</
code>的Firebug控制台输出

Node.js:

<code> {} [] </ code>和<code>({} [])</
code>的Node.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开发人员工具则将其视为“语句”。



 类似资料:
  • 问题内容: 我正在阅读此问题的答案(关于“ wat”视频),它说: 这被解释为空的代码块,一元加号和空数组。第一部分不执行任何操作,将数组转换为其元素的逗号分隔字符串(用于空数组的空字符串),然后转换为数字(将空字符串转换为0),因此为0。 我目前正在从“权威指南”中学习JS,因此我试图真正理解类似的东西。 我的问题是,JS什么时候决定将其解释为空的代码块而不是空的对象? 另外,我想了解Node.

  • 我有一个HashMap对象,它将存储在NoSQL数据库中。当它有条目时,它看起来像: 如果db中不存在此“input”,我希望响应显示“input”:{},而不是“input”:null。最好的方法是什么? 谢谢

  • 问题内容: 我正在使用postgreSQL。我有一列: 但是,当我想插入带有空字符串的行时,如下所示: 它不会给我错误并接受。如何检查插入值应为?(既不为空也不为空) PS: 我的专栏定义为: 问题答案: 向列定义添加约束。例如类似: 有关更多信息,请参见http://www.postgresql.org/docs/current/static/ddl- constraints.html

  • 我正在用一个项目中相互协作的两个独立的Web应用程序来试验一些问题。在进行了X次部署之后,我得到了臭名昭著的“java.lang.OutofMemoryError:PermGen Space”错误。 所以我已经用VisualVM监视PermGen空间一段时间了,不断地重新部署应用程序,看看发生了什么。 这里有奇怪的行为: 首先,我已经重新部署了15倍以上的第一个应用程序。行为与预期的一样:内存图就

  • 问题内容: 我正在使用pandas库读取一些CSV数据。在我的数据中,某些列包含字符串。该字符串是一个可能的值,一个空字符串也可以。我设法让大熊猫以字符串形式读取“ nan”,但我不知道如何获取它而不读取作为NaN的空值。这是示例数据和输出 它正确地写着“男”为字符串“南”,但仍读取空单元格作为NaN的。我想传递的参数read_csv(带),但它仍然读取空单元格作为NaN的。 我知道我可以在读取后

  • 问题内容: 我写的http标签里面: 我有以下sas bean 在代码中,我从注册表中获取信息: 现在正在工作。 但是不赞成上课的问题 我这样替换了sas bean 但现在 总是返回空列表。 如何解决? PS完整配置: web.xml: 安全上下文: applicationContext.xml: dataContext.xml restTemplateContext.xml securityCo