JavaScript对象字面量语法错误

13
以下代码在Chrome和Firefox中会产生语法错误,但在Node.js中不会:
{"hello": 1}

然而,以下代码在任何地方都可以运行:

var x = {"hello": 1}

同样,以下方法适用于所有情况:

{hello: 1}

这个奇怪行为的解释是什么?
2个回答

17

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

13

第一个例子不是对象字面量,而是一个块语句,块包含语句。顺序为字符串字面量冒号数字字面量 没有构成有效语句。

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

第三个例子也是块语句,但您将字符串字面量和冒号替换为标签(虽然允许,但没有循环就没有意义)。

在 JavaScript 中,上下文很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接