一尘不染

在控制台中定义JavaScript对象

json

当我在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

也许这是一个愚蠢的问题,但我真的想知道为什么会这样吗?


阅读 222

收藏
2020-07-27

共1个答案

一尘不染

因为您的语句被视为一个 block ,而不是对象文字声明。

请注意,ExpressionStatement不能以大括号开头,因为这可能会使它与Block不明确。另外,ExpressionStatement不能以function关键字开头,因为这可能会使它与FunctionDeclaration产生歧义。

要使其作为 表达式 求值,它必须是赋值的右侧,用括号括起来或在运算符之前。(!{a:1,b:2}

2020-07-27