为什么直接在Object文字上访问属性会抛出一个SyntaxError?

时间:2011-12-18 18:27:58

标签: javascript

尝试访问对象a

的属性{}
{}.a

我收到错误

SyntaxError: Unexpected token .

parens一切都很好:

({}).a

为什么我会在第一时间出错?有歧义吗?

2 个答案:

答案 0 :(得分:15)

花括号被解释为block statement,而不是对象文字。您无法使用左大括号开始表达式语句。

规范声明:

  

注意 ExpressionStatement 无法以大括号开头   因为这可能会使 Block 模糊不清。还有,一个    ExpressionStatement 无法以function关键字开头,因为   这可能会使 FunctionDeclaration 变得模棱两可。

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

答案 1 :(得分:1)

{}用于构建对象。通常你首先将新对象分配给变量。

var o = {
    a: "b"
};

console.log(o.a);

但这也是可能的:

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