Почему добавление скобок предотвращает ошибку?

Почему, когда я пишу {}.key = 0 в консоли Chrome, я получаю сообщение об ошибке:

> {}.key = 0
> Uncaught SyntaxError: Unexpected token .

Но когда я заключаю вышеупомянутое выражение в круглые скобки (( )), я не получаю ошибки:

> ({}.key = 0)
> 0

Что именно здесь происходит? Я думал бы, что та же самая ошибка, которую я получил в первом сценарии, все еще применяется ко второму?

Изображение вывода консоли:

enter image description here

Ответ 1

{ } перегружены в синтаксисе JavaScript. Они используются как для блоков (операторов), так и для литералов объектов. Правило таково: если { появляется в начале оператора, он анализируется как блок; в противном случае это объектный литерал.

В {}.key { появляется в начале оператора. Разбирает как

{
    // this is an empty block
}
.key  // syntax error here

Добавление любого токена перед { (например, () делает его анализируемым как литерал объекта. Например, 42, {}.key = 0 также будет работать.