JavaScript奇怪的数组定义语法

Jam*_*ell 8 javascript syntax

我和一些同事遇到了一些更奇怪的JavaScript语法.我们无法解释以下行为(我使用的是Chrome控制台):

> {}[1]
Run Code Online (Sandbox Code Playgroud)

产量

[1]
Run Code Online (Sandbox Code Playgroud)

从本质上讲,在数组之前包含任何对象(不仅仅是空)是有效的语法,结果始终只是数组.这有什么解释吗?这种情况不是这样的吗?

此外,这个问题有点难以搜索,因为它包含的搜索引擎效果不佳.如果这是一个重复的问题,请告诉我.

joe*_*ews 7

{}是一个空代码块语句.接下来是一个Array文字[1],它是程序{}[1]评估的值.

它几乎相当于:

if (true) {
  // empty block!
}
[1];
Run Code Online (Sandbox Code Playgroud)

如果要1在空对象文字中使用键获取值,请使用括号:

({})[1] // undefined

您可以使用AST Explorer查看JavaScript解析器的代码视图.