以下内容将在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中,它们会以您定义它的方式返回。
答案 0 :(得分:25)
第二行给你一个SyntaxError
,因为它开头的{
标记会导致歧义,解析器将其视为Block statement,而不是开始对象文字。
例如,有效的Block语句:
{ foo: 'bar' }
上面的看起来像对象文字,但事实并非如此,因为代码是在语句上下文中评估的。
它将被解析为一个包含labelled statement(foo
)的块,后跟一个表达式语句('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