在Firefox控制台中,此代码将生成错误:
{"d" : ["bankaccountnumber", "$1234.56"] }
> SyntaxError: invalid label {
> message="invalid label", more...}
此代码工作得很好
{d : ["bankaccountnumber", "$1234.56"] }
> ["bankaccountnumber", "$1234.56"]
此代码也可以正常工作
var a = {'d' : ["bankaccountnumber", "$1234.56"] };
a.d
> ["bankaccountnumber", "$1234.56"]
有人可以帮助解释为什么会有差异吗?谢谢!
答案 0 :(得分:6)
这是因为语法含糊不清。当你尝试在前两行中创建一个普通的对象文字时,JavaScript实际上将它解释为一组大括号,然后是一个标签,然后是一个语句:
{
d: ["bankaccountnumber", "$1234.56"]
}
此代码不会评估对象,而只评估数组。第一个示例,您尝试使用字符串作为标签,这是不正确的语法。第三个示例正常工作,创建一个对象并将其存储在a
。
答案 1 :(得分:4)
可能很难确定它是表达式还是块。如果在对象周围使用括号,它会强制表达式。分组运算符(
和)
强制{
和}
被解析为对象文字。
({"d" : ["bankaccountnumber", "$1234.56"] }) // works
阅读Named function expressions demystified。它与此问题没有直接关系,但在讨论使用分组括号和eval()
时确实解决了这个问题。