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

时间:2010-09-17 00:08:34

标签: 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

为什么1返回{a : 1},为什么{a : 1, b : 2.2}会出错?在Ruby中,它们会以您定义它的方式返回。

3 个答案:

答案 0 :(得分:25)

第二行给你一个SyntaxError,因为它开头的{标记会导致歧义,解析器将其视为Block statement,而不是开始对象文字。

例如,有效的Block语句:

{ foo: 'bar' }

上面的看起来像对象文字,但事实并非如此,因为代码是在语句上下文中评估的。

它将被解析为一个包含labelled statementfoo)的块,后跟一个表达式语句('bar')。

要确保使用对象文字的语法,可以用括号(也称为the grouping operator)包装它:

({ foo: 'bar' })

分组操作符只能使用表达式,因此没有歧义。

另见:

答案 1 :(得分:0)

我不是百分之百正面,但我认为正在发生的是,在第二行你定义一个块,而不是一个对象。因此,解析器到达逗号时会出现解析错误,因为它需要半颜色。定义的标签是标签,就像在goto或switch语句中一样。我希望这个解释有意义。

答案 2 :(得分:0)

console as eval('你输入')

eval({....}) --- this will get an error
eval('({....})')---eval string as a function