为什么直接访问Object字面量上的属性会抛出SyntaxError ?

Why does accessing a property directly on an Object literal throw a SyntaxError?

本文关键字:属性 SyntaxError 访问 Object 为什么      更新时间:2023-09-26

试图访问对象{}的属性a

{}.a

我得到错误

SyntaxError: Unexpected token .

有父母一切都好:

({}).a

为什么我首先得到一个错误?是否存在歧义?

大括号被解释为块语句,而不是对象字面量。表达式语句不能以左花括号开始。

规格说明:

ExpressionStatement不能以左花括号开头因为这可能会使它与产生歧义。此外,一个ExpressionStatement不能以function关键字开头,因为FunctionDeclaration可能会使它有歧义。

来源:http://es5.github.com/x12.html x12.4

{}是用来构建对象的。通常首先将新对象赋值给一个变量。

var o = {
    a: "b"
};
console.log(o.a);

,但这也是可能的:

console.log({
    a: "b"
}.a);