Debido {a : 1}
es una declaración y no se permite que siga por ==
embargo
({ a : 1 })
es una expresión y se le permite ser seguido por ==
Esto es, básicamente, las reglas definidas en la gramática.
Sin embargo tenga en cuenta que ({ a: 1} == { a: 1})
es válido. Entonces la expresión de equivalencia es válida.
Esto significa que {a : 1} == { a : 1 }
simplemente no es una declaración válida .
12.4 of the ES5.1 spec dice
NOTA Un ExpressionStatement no puede 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 de la función porque eso podría hacer que sea ambigua con una FunctionDeclaration.
Como comentario, usted encontrará que
({a : 1}) != {a : 1}
porque son dos nuevos objetos
¿Estás seguro? Espero que '! ==' falle pero no '! =' – spraff
@spraff: sí, está seguro. –