花括号语法错误后的javascript点?:{num:1} .num

Web*_*ner 3 javascript syntax syntax-error

在Chrome的devtools中输入以下内容:{num:1}.num给出语法错误:

SyntaxError: Unexpected token .
Run Code Online (Sandbox Code Playgroud)

...但键入此返回1:

(function() {
    return {num:1}.num;
})();
Run Code Online (Sandbox Code Playgroud)

为什么我在第一个例子中得到语法错误而不是第二个例子?

Fel*_*ing 5

因为在这种情况下大括号是模糊的,并且被解释为块语句,而不是对象文字.就像是

{
    num: 1
}
.num
Run Code Online (Sandbox Code Playgroud)

哪里num:被解释为标签.

您可以使用分组运算符强制将构造解释为表达式:

({num: 1}).num
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,大括号只能是一个对象文字,因为return语句只能包含一个表达式(而不是一个语句)