Defining a JavaScript object in console
Because your statement is being evaluated as a block, not an object literal declaration.
Note that an ExpressionStatement cannot start with an opening curly brace because that might make it ambiguous with a Block. Also, an ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration.
To make it evaluate as an expression, it needs to be the right-hand side of an assignment, wrapped in parentheses or preceded by an operator. (!{a:1,b:2}
)
{ a: 1, b: 2 }
is a code block, with two wrongly labelled variables.
To create an object, surround the code block by parentheses, so that the braces are interpreted as object literals:
({ a: 1, b: 2 })
It's because an opening {
with no context is interpreted as the beginning of a block. You can use parentheses:
({ a: 1, b: 2 })
As it is though, it's just a block of execution - like one might find after an if
or for
. So you can type:
{alert("Hello!");}
Here's more about that. Blocks sort of return values too, which is both awesome and disappointing.