JavaScript奇怪的数组定义语法

时间:2016-10-31 19:47:17

标签: javascript syntax

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

> {}[1]

产量

[1]

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

此外,这个问题很难搜索,因为它包含的字符不适合搜索引擎。如果这是一个重复的问题,请告诉我。

2 个答案:

答案 0 :(得分:7)

{}是空的code block statement。接下来是一个数组文字[1],它是您的程序{}[1]评估的值。

它几乎相当于:

if (true) {
  // empty block!
}
[1];

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

({})[1] // undefined

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

答案 1 :(得分:4)

  使用

A block statement(或其他语言的复合语句)   将零个或多个语句分组。该块由一对分隔   大括号。

{} <-- block statement
[1] <-- array

所以基本上打字&gt; [1]