在控制台中定义JavaScript对象

时间:2012-01-31 15:26:11

标签: javascript json oop google-chrome v8

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

>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

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

6 个答案:

答案 0 :(得分:8)

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

  

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

要将其评估为表达式,它必须是赋值的右侧,括在括号中或前面有运算符。 (!{a:1,b:2}

答案 1 :(得分:7)

 { a: 1, b: 2 }

是一个代码块,有两个错误的labelled变量。

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

({ a: 1, b: 2 })

答案 2 :(得分:4)

这是因为没有上下文的开头{被解释为块的开头。您可以使用括号:

({ a: 1, b: 2 })

尽管如此,它只是一个执行块 - 就像在iffor之后可能找到的那样。所以你可以输入:

{alert("Hello!");}

Here's more about that.也阻止了一些返回值,这既令人敬畏又令人失望。

答案 3 :(得分:2)

因为{ a: 1, b: 2 }不是要执行的有效表达式。 JavaScript看起来就像一个代码块,因为它以花括号开始和结束。

如果您尝试({ a: 1, b: 2 }),它就会有用。

答案 4 :(得分:2)

  

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

真正的乔希

如果您希望将其评估为对象,请写下:

> ({a : 1, b : 2})
Object
a: 1
b: 2
__proto__: Object

答案 5 :(得分:1)

请改为尝试:

({ "a" : 1, "b" : 2 })