为什么裸阵列有效的Javascript语法,但不是裸对象?

Ale*_*x D 2 javascript syntax

在我的Javascript控制台(在Chrome中)我正在尝试这个:

 { 'a' : 1 }
Run Code Online (Sandbox Code Playgroud)

并得到 SyntaxError: Unexpected token :

但这有效:

 ['a', 1]
Run Code Online (Sandbox Code Playgroud)

是什么赋予了???

Aln*_*tak 6

这是因为花括号有两个用途 - 要么引入一个块,要么作为对象文字的开头(后者是一个表达式).

控制台无法分辨哪个,因此它假设一个语句块,并且稍后才发现该块的内容不能被解析为语句.

对于带方括号的数组文字,不存在歧义.

可以通过更改上下文来解决歧义,以便{...} 必须将其解释为表达式而不是语句块,例如,将其设置为运算符的RHS,将其包装在括号中,或将其作为函数参数传递等.