在控制台中定义JavaScript对象

Ser*_*gey 6 javascript oop json google-chrome v8

当我将简单对象键入Chrome JavaScript控制台时,我得到如下输出:

>true
true
>1/3
0.3333333333333333
Run Code Online (Sandbox Code Playgroud)

等等.

但是当我键入对象时会发生语法错误:

>{ 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
Run Code Online (Sandbox Code Playgroud)

虽然我确信这个表达式可以正确地用于初始化对象,因为:

>obj = { a: 1, b: 2 }
Object
a: 1
b: 2
__proto__: Object
Run Code Online (Sandbox Code Playgroud)

也许这是一个愚蠢的问题,但我真的想知道为什么会发生这种情况?

jos*_*736 8

因为您的语句被评估为,而不是对象文字声明.

请注意,ExpressionStatement不能以开括号大括号开头,因为这可能使其与Block不一致.此外,ExpressionStatement不能以function关键字开头,因为这可能使其与FunctionDeclaration不一致.

为了使其作为表达式进行求值,它需要是赋值的右侧,用括号括起来或者以运算符开头.(!{a:1,b:2})


Rob*_*b W 7

 { a: 1, b: 2 }
Run Code Online (Sandbox Code Playgroud)

是一个代码块,带有两个错误标记的变量.

要创建对象,请用括号括起代码块,以便将大括号解释为对象文字:

({ a: 1, b: 2 })
Run Code Online (Sandbox Code Playgroud)