JavaScript 对象文字语法错误

JavaScript object literals syntax error

本文关键字:错误 语法 文字 对象 JavaScript      更新时间:2023-09-26

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

{"hello": 1}

但是,以下代码适用于所有位置:

var x = {"hello": 1}

此外,以下内容在任何地方都有效:

{hello: 1}

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

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 中很重要。

相关文章: