输入{a:1}给出1和{a:1,b:2}在Javascript控制台中输入错误的行为是什么?

nop*_*ole 15 javascript firebug javascript-objects

以下内容将在Firebug或jsconsole.com或其他Javascript交互式控制台中显示:

>>> foo = { a : 1, b : 2.2 }
Object { a=1, more...}

>>> foo.a
1

>>> foo.b
2.2

>>> { a : 1, b : 2.2 }
SyntaxError: invalid label { message="invalid label", more...}

>>> { a : 1 }
1
Run Code Online (Sandbox Code Playgroud)

为什么是1返回{a : 1}以及为何{a : 1, b : 2.2}给了一个错误?在Ruby中,它们会以您定义它的方式返回.

CMS*_*CMS 25

第二行是给你一个SyntaxError因为{它开头的标记引起歧义,解析器把它看作是一个Block语句,而不是对象文字的开头.

例如,一个有效的Block语句:

{ foo: 'bar' }
Run Code Online (Sandbox Code Playgroud)

上面看起来像一个对象文字,但它不是,因为代码是在语句上下文中计算的.

它将被解析为一个Block,它包含一个带标签的statement(foo),后跟一个表达式statement('bar').

要确保使用对象文字的语法,可以使用括号(也称为分组运算符)将其包装:

({ foo: 'bar' })
Run Code Online (Sandbox Code Playgroud)

分组运算符只能使用表达式,因此没有歧义.

也可以看看: