15

以下将显示在 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 中,它们会以您定义它的方式返回。

4

3 回答 3

25

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

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

{ foo: 'bar' }

上面看起来像一个对象文字,但它不是,因为代码是在语句 context中评估的。

它将被解析为一个块,其中包含一个标记语句( foo),后跟一个表达式语句 ( 'bar')。

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

({ foo: 'bar' })

分组运算符只能取表达式,因此没有歧义。

也可以看看:

于 2010-09-17T00:12:27.047 回答
0

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

于 2010-09-17T00:25:23.730 回答
-1

控制台执行 eval('you input')

eval({....}) --- this will get an error
eval('({....})')---eval string as a function
于 2010-09-17T00:29:36.267 回答