在Chrome的devtools中键入以下内容:{num:1}.num
会出现语法错误:
SyntaxError: Unexpected token .
...但输入此内容会返回1:
(function() {
return {num:1}.num;
})();
为什么我在第一个例子中得到语法错误而不是第二个例子?
答案 0 :(得分:5)
因为在这种情况下大括号是模糊的,并且被解释为block statement,而不是对象文字。像
这样的东西{
num: 1
}
.num
num:
被解释为label。
您可以使用分组运算符强制将构造解释为表达式:
({num: 1}).num
在第二种情况下,大括号只能是一个对象文字,因为return语句只能包含一个表达式(而不是一个语句)