3

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

 { 'a' : 1 }

并得到SyntaxError: Unexpected token :

但这有效:

 ['a', 1]

是什么赋予了???

4

4 回答 4

7

这是因为花括号有两种用途——或者引入块,或者作为对象字面量的开始(后者是一个表达式)。

控制台分不清是哪个,所以假设是一个语句块,后来才发现块的内容不能解析为语句。

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

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

于 2013-06-29T16:03:14.277 回答
3

这是一个

{
    var x = 'stuff'
    function doStuff(arg) { alert(arg) }
    doStuff(x)
}

它会发出警报stuff

现在,关于您的示例:JavaScript 认为它是一个块,如下所示:

{
    'a' : 1
}

由于'a' : 1不是一个有效的陈述,它失败了。

请注意,如果你这样做

'x' + { 'a' : 1 }

它有效,因为在+.

于 2013-06-29T16:02:22.663 回答
2

你可以做到new Object({'a' : 1})这一点。

于 2013-06-29T16:03:35.340 回答
2

正如其他人指出的那样,这是因为花括号具有双重用途。

解决歧义的最简单方法是添加一对括号:

> {'a': 1}
SyntaxError: Unexpected token :

> ({'a': 1})
Object {a: 1}
于 2013-06-29T16:04:43.980 回答