在Javascript控制台中给出1,{a:1,b:2}给出错误的{a:1}打字行为是什么?
问题描述:
下面将在Firebug或jsconsole.com或其他JavaScript交互式控制台显示:在Javascript控制台中给出1,{a:1,b:2}给出错误的{a:1}打字行为是什么?
>>> 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中,他们会按照您定义的方式回来。
答
第二行是给你一个SyntaxError
因为{
令牌在它开始引起歧义,解析器将其视为好像它是一个Block statement,而不是一个对象文本的开始。
例如,一个有效的块语句:
{ foo: 'bar' }
上面看起来像对象文本,但它不是,因为代码在语句上下文评价。
它将被解析为一个块,其中包含一个labelled statement(foo
),后跟一个表达式语句('bar'
)。
为了确保您使用的对象文本的语法,可以用括号(也称为the grouping operator)把它包装:
({ foo: 'bar' })
分组操作者只能取表达式,因此没有歧义。
参见:
答
我不是100%肯定的,但我认为正在发生的是,在第二行你定义一个块,而不是一个对象。因此,当解析器到达逗号时出现解析错误,因为它需要半色。定义的标签是标签,就像在goto或switch语句中一样。我希望这个解释是有道理的。
答
控制台执行,与eval(“你输入”)
eval({....}) --- this will get an error
eval('({....})')---eval string as a function
这是一个很大的问题,然后一个很好的答案!很显然,我在谈论CMS的答案。 – 2010-09-17 00:28:40
http://*.com/questions/1509535/javascript-false-and-false/1509664#1509664是一个看似无关紧要的问题,但是对于你可能会绊倒的一件事情有一个相关的答案。 – 2010-09-17 00:31:12