In ECMA-262 are many different types of Expressions defined. The "expression" mentioned in the opening Question matches best the PrimaryExpression, which is described like this: (each indented line is a possible representation)
PrimaryExpresion:
this //as the 'this'-keyword
Identifier //variable or function name ('alpha' in the question)
Literal //string, number, mathematical expressions
ArrayLiteral //[1,2,3]
ObjectLiteral // {"first" : 80}
( Expression ) //An expression encapsulated in bracket
Curly bracket code block:
Block :
{ StatementList_opt } - A list of statements
Most relevant Statement in this case:
ExpressionStatement :
[lookahead ∉ {{, function}] Expression ;
This allows only expression without an opening curly bracket or the 'function'-keyword at the beginning. (FunctionDeclarations are separated from statements and expressions, except for lambda functions which are FunctionExpression)
The Expression definition doesn't directly specify a PrimaryExpression but, over a long chain of definitions, PrimaryExpression can be considered as Expression:
Expression:
AssignmentExpression
Expression, AssingmentExpression
I did check the whole chain of definitions to see if PrimaryExpression is actually a Expression. Here is the definition chain:
Expression:
AssignmentExpression:
ConditionalExpression:
LogicalORExpression:
LogicalANDExpression:
BitwiseORExpression:
BitwiseXORExpression:
BitwiseANDExpression:
EuqalityExpression:
RelationalExpression:
ShiftExpressions:
AdditiveExpression:
MultiplicativeExpression:
UnaryExpression:
PostfixExpression:
LeftHandSideExpression:
NewExpression:
MemberExpression:
PrimaryExpression:
To answer the question
The curly brackets object notation specified as ObjectLiteral in ECMA-262 is by definition valid in every Expression except in case of an Expression which is derived from a Statement, as the ExpressionStatement explicitly prohibits the occurrence of an opening curly bracket as first character of an expression to resolve the conflict with the curly bracket code block (defined as Block). FunctionBody, Block, Program (global scope) and all loop constructs (IterationStatements) make use of statements and therefore have the restrictions to contain only Blocks and not ObjectLiterals in the code section.
Finally
The specification restricts curly brackets to represent either a code block or an object notation. The curly brackets are treated as a code block wherever the use of the 'var'-keyword is allowed and vice versa.