JavaScript对象字面符号混淆

nan*_*din 7 javascript json

在Firefox控制台中,此代码将生成错误:

{"d" : ["bankaccountnumber", "$1234.56"] } 
>   SyntaxError: invalid label {
> message="invalid label",  more...}
Run Code Online (Sandbox Code Playgroud)

这段代码工作得很好

{d : ["bankaccountnumber", "$1234.56"] } 
> ["bankaccountnumber", "$1234.56"]
Run Code Online (Sandbox Code Playgroud)

此代码也可以正常工作

var a = {'d' : ["bankaccountnumber", "$1234.56"] };
a.d
> ["bankaccountnumber", "$1234.56"]
Run Code Online (Sandbox Code Playgroud)

有人可以帮助解释为什么会有差异?谢谢!

Cla*_*diu 6

这是因为语法含糊不清.当你尝试在前两行中创建一个普通的对象文字时,JavaScript实际上将它解释为一组大括号,然后是一个标签,然后是一个语句:

{
    d: ["bankaccountnumber", "$1234.56"]
}
Run Code Online (Sandbox Code Playgroud)

此代码不会评估对象,而只评估数组.第一个示例,您尝试使用字符串作为标签,这是不正确的语法.第三个示例正常工作,创建一个对象并将其存储a.

  • +1 @OP:为了使它成为一个表达式(一个对象文字),而不是围绕一个标签后跟一个数组文字的大括号,你必须将它用作右手值(如上一个例子).作为右手值,所有这三个都是有效的对象文字符号(一个使用`d:`,一个使用`"d":`,一个使用`'d':`).有些OT,但只有"d":`一个是有效的JSON,如果这与你正在做的事情相关,因为JSON是对象文字表示法的*子集*.(http://json.org) (4认同)
  • @Oscar:第二个例子不起作用.它不会产生对象字面值.它恰好是用于评估带有标签和数组表达式的块的有效语法 (3认同)