Почему добавление скобок предотвращает ошибку? - PullRequest
14 голосов
/ 22 июня 2019

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

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

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

> ({}.key = 0)
> 0

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

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

enter image description here

1 Ответ

15 голосов
/ 22 июня 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...