12

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

{"hello": 1}

但是,以下代码适用于任何地方:

var x = {"hello": 1}

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

{hello: 1}

这种奇怪行为的解释是什么?

4

2 回答 2

15

NodeJS REPL将代码评估为表达式,通过将代码包装在括号中,从而{"hello":1}({"hello":1})其成功解析为对象文字。

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

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

{hello:1}解析成功,因为hello在这种情况下具有标签的含义:

/*imagine if (true) */ {
    hello: 1;
} //        ^-- Automatic Semicolon Insertion
于 2013-06-25T13:42:31.843 回答
13

第一个例子不是一个对象字面量,它是一个。块包含语句。序列字符串字面量、冒号数字字面量不是有效语句。

第二个例子是一个对象字面量。

第三个示例也是一个块,但您已将字符串文字和冒号替换为标签(这是允许的,但由于没有循环,因此毫无意义)。

上下文在 JavaScript 中很重要。

于 2013-06-25T13:41:21.743 回答