Why is it when I write {}.key = 0
in the chrome console I get an error:
> {}.key = 0
> Uncaught SyntaxError: Unexpected token .
But when I encapsulate the above expression in parentheses (( )
) I get no error:
> ({}.key = 0)
> 0
What exactly is going on here? I would have thought the same error I got in the first scenario still applied to the second?
Image of console output:
Why is it when I write {}.key = 0
in the chrome console I get an error:
> {}.key = 0
> Uncaught SyntaxError: Unexpected token .
But when I encapsulate the above expression in parentheses (( )
) I get no error:
> ({}.key = 0)
> 0
What exactly is going on here? I would have thought the same error I got in the first scenario still applied to the second?
Image of console output:
Share Improve this question edited Jun 23, 2019 at 7:08 Shnick asked Jun 22, 2019 at 14:19 ShnickShnick 1,3911 gold badge18 silver badges39 bronze badges 1-
One is a statement and one is an expression. As an expression
{}
returns an object. As a statement it is a code block – slebetman Commented Jun 22, 2019 at 14:27
1 Answer
Reset to default 15{ }
are overloaded in JavaScript syntax. They're used for both blocks (of statements) and object literals. The rule is: If a {
appears at the start of a statement, it is parsed as a block; otherwise it is an object literal.
In {}.key
the {
appears at the start of the statement. It parses as
{
// this is an empty block
}
.key // syntax error here
Adding any token before {
(such as (
) makes it parse as an object literal. For example, 42, {}.key = 0
would also work.