JavaScript对象文字语法错误

时间:2013-06-25 13:39:18

标签: javascript

以下代码在Chrome和Firefox中产生语法错误,但不会产生Node.js:

{"hello": 1}

但是,以下代码无处不在:

var x = {"hello": 1}

此外,以下工作无处不在:

{hello: 1}

这种奇怪行为有什么解释?

2 个答案:

答案 0 :(得分:13)

第一个例子不是对象文字,而是block。块包含语句。序列字符串文字冒号数字文字不是有效的语句。

第二个例子是一个对象文字。

第三个例子也是一个块,但是你已经用label取代了字符串文字和冒号(这是允许的,但是因为没有循环而没有意义)。

上下文在JavaScript中很重要。

答案 1 :(得分:11)

NodeJS REPL evaluates code as an expression,将代码包装在括号中,使{"hello":1}成为({"hello":1}),并将其成功解析为对象文字。

通常和其他地方(在Chrome / Firefox的控制台中),花括号被解析为块的分隔符,如:

/*imagine if (true) */ {
    "hello": 1 // <-- What's this syntax? It's meaningless.
}

{hello:1}成功解析,因为此上下文中的hello具有label的含义:

/*imagine if (true) */ {
    hello: 1;
} //        ^-- Automatic Semicolon Insertion