我和一些同事遇到了一些更奇怪的JavaScript语法。我们无法解释以下行为(我使用的是Chrome控制台):
> {}[1]
产量
[1]
本质上,在数组之前包含任何对象(不仅仅是空)是有效的语法,结果始终只是数组。这有什么解释吗?这种情况不会出现这种情况吗?
此外,这个问题很难搜索,因为它包含的字符不适合搜索引擎。如果这是一个重复的问题,请告诉我。
答案 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]