gpt4 book ai didi

javascript - JS 什么时候将 {} 解释为空 block 而不是空对象?

转载 作者:IT老高 更新时间:2023-10-28 22:59:50 24 4
gpt4 key购买 nike

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

  1. {}+[]
    这被解释为空代码块、一元加号和空数组。第一部分什么都不做,数组被转换为它的元素的逗号分隔字符串(空数组的空字符串),然后是一个数字(空字符串被转换为 0),因此为 0。

我目前正在从“权威指南”学习 JS,所以我尝试真正理解这样的事情。

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

此外,我想了解 Node.js 和 Firebug 之间的一些不一致之处。

Firebug :

Firebug console output for <code>{}[]</code> and <code>({}[])</code>

Node.js:

Node.js output for <code>{}[]</code> and <code>({}[])</code>

最佳答案

让我们看看语言语法,好吗? Section 12, Statements :

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

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

Block :
{ StatementList(opt) }

StatementList :
Statement
StatementList Statement

这又是一种奇特的说法,一个 block 是一个{,可选地后跟一堆语句,然后是一个}

这就是您在示例中看到的:在 JavaScript 解析器认为您所拥有的可能是对象文字(在 ExpressionStatement 下的某处定义之前,“语句”可能是第 4 件事),它首先认为你有一个“ block ”。

编辑:如果你愿意,你可以在 JavaScript 引擎的源代码中看到它:

关于您的第二个问题,我们已经详细介绍了 on this question .一句话总结:Node.js 将您的输入视为表达式(因此它不能是“ block ”),而 Firebug/Chrome 开发工具将其视为“语句”。

关于javascript - JS 什么时候将 {} 解释为空 block 而不是空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26347326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com