在我的 Javascript 控制台(在 Chrome 中)我正在尝试这个:
{ 'a' : 1 }
并得到SyntaxError: Unexpected token :
但这有效:
['a', 1]
是什么赋予了???
在我的 Javascript 控制台(在 Chrome 中)我正在尝试这个:
{ 'a' : 1 }
并得到SyntaxError: Unexpected token :
但这有效:
['a', 1]
是什么赋予了???
这是因为花括号有两种用途——或者引入块,或者作为对象字面量的开始(后者是一个表达式)。
控制台分不清是哪个,所以假设是一个语句块,后来才发现块的内容不能解析为语句。
对于带有方括号的数组文字,不存在歧义。
歧义可以通过更改上下文来解决,以便{...}
必须将其解释为表达式而不是语句块,例如,将其设为运算符的 RHS,将其包装在括号中,或将其作为函数参数传递等。
这是一个块:
{
var x = 'stuff'
function doStuff(arg) { alert(arg) }
doStuff(x)
}
它会发出警报stuff
。
现在,关于您的示例:JavaScript 认为它是一个块,如下所示:
{
'a' : 1
}
由于'a' : 1
不是一个有效的陈述,它失败了。
请注意,如果你这样做
'x' + { 'a' : 1 }
它有效,因为在+
.
你可以做到new Object({'a' : 1})
这一点。
正如其他人指出的那样,这是因为花括号具有双重用途。
解决歧义的最简单方法是添加一对括号:
> {'a': 1}
SyntaxError: Unexpected token :
> ({'a': 1})
Object {a: 1}