当我在Chrome JavaScript Console中键入简单对象时,会得到如下输出:
>true true >1/3 0.3333333333333333
等等。
但是当我键入对象时发生语法错误:
>{ a: 1, b: 2 } SyntaxError: Unexpected token : arguments: Array[1] 0: ":" length: 1 __proto__: Array[0] get message: function getter() { [native code] } get stack: function getter() { [native code] } set message: function setter() { [native code] } set stack: function setter() { [native code] } type: "unexpected_token" __proto__: Error
虽然我确定可以在初始化对象时正确使用此表达式,因为:
>obj = { a: 1, b: 2 } Object a: 1 b: 2 __proto__: Object
也许这是一个愚蠢的问题,但我真的想知道为什么会这样吗?
因为您的语句被视为一个 block ,而不是对象文字声明。
请注意,ExpressionStatement不能以大括号开头,因为这可能会使它与Block不明确。另外,ExpressionStatement不能以function关键字开头,因为这可能会使它与FunctionDeclaration产生歧义。
要使其作为 表达式 求值,它必须是赋值的右侧,用括号括起来或在运算符之前。(!{a:1,b:2})
!{a:1,b:2}