JavaScript 对象字面量语法错误

IT技术 javascript
2021-01-29 03:34:28

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

{"hello": 1}

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

var x = {"hello": 1}

此外,以下适用于任何地方:

{hello: 1}

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

2个回答

所述的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

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

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

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

上下文在 JavaScript 中很重要。