2011-12-18 13 views
7

Al intentar acceder a la propiedad a del objeto {}¿Por qué acceder a una propiedad directamente en un literal de Objeto arroja un SyntaxError?

{}.a 

me sale el error

SyntaxError: Unexpected token . 

Con parens todo está bien:

({}).a 

¿Por qué aparece un error en el primer lugar? ¿Hay ambigüedad?

+0

sintaxis JavaScript simplemente no permite eso. – Eliasdx

+0

La expresión '{}' se evalúa como un nuevo objeto nativo que no tiene propiedades propias. ¿Estás tratando de acceder a uno de los métodos 'Object.prototype'? –

+1

posible duplicado de [Acceso inmediato a la propiedad de un objeto] (http://stackoverflow.com/questions/7518538/immediately-accessing-an-objects-property) – RightSaidFred

Respuesta

15

Las llaves se interpretan como block statement, no como un objeto literal. No puede comenzar una declaración de expresión con un corsé izquierdo.

La especificación:

NOTA Un ExpressionStatement no pueden comenzar con una llave de apertura porque eso podría hacer que sea ambigua con un bloque . Además, un ExpressionStatement no puede comenzar con la palabra clave porque function que podrían hacer que sea ambigua con un FunctionDeclaration.

Fuente: http://es5.github.com/x12.html#x12.4

1

el {} están allí para construir el objeto. por lo general, primero asigna el nuevo objeto a una variable.

var o = { 
    a: "b" 
}; 

console.log(o.a); 

pero esto también es posible:

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