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

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

齐成双
2023-03-14
问题内容

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

{}+[]
这被解释为空的代码块,一元加号和空数组。第一部分不执行任何操作,将数组转换为其元素的逗号分隔字符串(用于空数组的空字符串),然后转换为数字(将空字符串转换为0),因此为0。
我目前正在从“权威指南”中学习JS,因此我试图真正理解类似的东西。

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

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


问题答案:

让我们看一下语言语法,对吧?第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

  • 本文向大家介绍如何检查一个对象是否为空,包括了如何检查一个对象是否为空的使用技巧和注意事项,需要的朋友参考一下 检查一个数组为空很容易,直接调用 length 方法即可,那么如何检查一个对象是否为空呢 ❓ 这里的空指的是对象没有自有属性 假设这里有两个对象,一个是 obj 一个是 anotherObj 想了半天查看对象是否有 Symbol 属性只能使用 getOwnPropertySymbols

  • 本文向大家介绍如何判断一个对象是否为空?相关面试题,主要包含被问及如何判断一个对象是否为空?时的应答技巧和注意事项,需要的朋友参考一下 可以使用 JSON.stringify() 方法判断 还有就是使用for in 遍历该对象 3.ES6 新增的方法 Object.keys(): Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。 如果我们的对象为空,他会返回一个

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

  • 问题内容: 这是在最近的PyCon演讲中提出的。 该声明 没有任何意义,但是也不会引发异常。我觉得这一定是由于拆箱规则造成的。您也可以使用列表对元组进行解包,例如, 符合您的期望。作为逻辑结果,当要拆包的元素数为0时,这也应该起作用,这将解释为什么分配给空列表是有效的。当您尝试将非空列表分配给空列表时会发生什么,进一步支持了该理论: 如果元组也是如此,我将对此解释感到满意。如果我们可以解压缩到包含

  • 首先,我收到来自post string属性和来自控制器的inputStream。 接下来,我的服务调用ParseGeojosnStream以流式传输文件的内容。 接下来,传递特性的名称和列表,并将其插入表中。 最后,使用字符串属性和表名作为id创建scheme。 那么,当强制转换为json并将其存储在数据库中时,为什么要返回一个空的属性对象呢? 代码如下: log.info(“jsonGeomet