JavaScript对象文字语法错误

ipa*_*ola 9 javascript

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

{"hello": 1}
Run Code Online (Sandbox Code Playgroud)

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

var x = {"hello": 1}
Run Code Online (Sandbox Code Playgroud)

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

{hello: 1}
Run Code Online (Sandbox Code Playgroud)

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

Que*_*tin 13

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

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

第三个例子也是一个块,但是你已经用一个标签替换了字符串文字和冒号(这是允许的,但由于没有循环而没有意义).

上下文在JavaScript中很重要.


Rob*_*b W 11

所述的NodeJS REPL评估代码作为表达,通过包装在括号中的代码,从而导致{"hello":1}({"hello":1})被成功地分析作为对象常量.

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

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

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

/*imagine if (true) */ {
    hello: 1;
} //        ^-- Automatic Semicolon Insertion
Run Code Online (Sandbox Code Playgroud)