JavaScript奇怪的数组定义语法

8

我和几个同事发现了一些奇怪的JavaScript语法。我们不太能解释下面的行为(我正在使用Chrome控制台):

> {}[1]

收益率

[1]

基本上,可以在数组之前包含任何对象(不仅仅是空对象),语法是有效的,并且结果始终只是数组。这个行为有没有解释?是否存在任何不符合这种行为的情况?
此外,这个问题有点难以搜索,因为它包含一些不适合搜索引擎的字符。如果这是一个重复的问题,请告诉我。

3
因为 {} 是一个空的代码块... - epascarello
你能举一个在数组之前有非空对象的例子吗? - Sara Fuerst
{ a: 'b' }[1] yields [1] - Jamie Counsell
@JamieCounsell 这是一个包含标记语句的代码块(a 是标记,'b' 是字符串字面表达式语句)。AST explorer - joews
谢谢!我以前从未见过那个浏览器。今后一定会参考它。 - Jamie Counsell
2个回答

7

{}是一个空的代码块语句。它后面跟着一个数组字面量[1],这就是你的程序{}[1]所评估的值。

它基本上等同于:

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

如果你想在一个空的对象字面量中通过键 1 获取值,需要使用括号: ({})[1] // undefined 你可以使用 AST Explorer 来查看 JavaScript 解析器对你的代码的视图。

4

块级语句(或其他语言中的组合语句)用于将零个或多个语句分组。该块由一对花括号括起来。

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

所以基本上打了类型“> [1] ”

啊,这很有道理!谢谢! - Jamie Counsell
Chrome控制台并不总是将其评估为语句,如果您仅输入 {},它将将其评估为对象文字表达式。 - MinusFour
1
@MinusFour 控制台会自动将您的输入用括号包裹起来。{ }:块,({ }):对象字面量。 - joews

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接