在我的Javascript控制台(在Chrome中)我正在尝试这个:
{ 'a' : 1 }
并获得SyntaxError: Unexpected token :
但这有效:
['a', 1]
是什么给了???
答案 0 :(得分:6)
这是因为花括号有两个用途 - 要么引入一个块,要么作为对象文字的开头(后者是表达式)。
控制台无法分辨哪个,因此它假设一个语句块,后来才发现该块的内容无法解析为语句。
对于带方括号的数组文字,不存在歧义。
可以通过更改上下文来解决歧义,以便{...}
必须被解释为表达式而不是语句块,例如通过使其成为运算符的RHS,将其包装在括号中,或将其作为函数参数传递等。
答案 1 :(得分:3)
这是阻止:
{
var x = 'stuff'
function doStuff(arg) { alert(arg) }
doStuff(x)
}
它会提醒stuff
。
现在,关于你的例子:JavaScript认为它是一个块,如下所示:
{
'a' : 1
}
由于'a' : 1
不是有效声明,因此失败。
请注意,如果你这样做
'x' + { 'a' : 1 }
它有效,因为在+
之后无法阻挡块。
答案 2 :(得分:2)
你可以为此new Object({'a' : 1})
做。
答案 3 :(得分:2)
正如其他人所指出的那样,这是因为花括号具有双重用途。
解决歧义的最简单方法是添加一对括号:
> {'a': 1}
SyntaxError: Unexpected token :
> ({'a': 1})
Object {a: 1}