Почему этот JavaScript не интерпретируется как блок кода при использовании точки с запятой? - PullRequest
0 голосов
/ 10 декабря 2018

В Chrome версии ^72, если я запускаю следующее JavaScript, ошибок нет.

{ prop: p } = { prop: 'prop' }
>> { prop: 'prop' }

Поэтому строка кода неожиданно интерпретируется как выражение выражения.

Но если я в конце запускаю тот же код с точкой с запятой, он запускается, как и ожидалось.

{ prop: p } = { prop: 'prop' };
>> Uncaught SyntaxError: Unexpected token =

Это ожидается, поскольку начальный { сообщает механизму JavaScript, что онблок кода, если мы не устраняем неоднозначность с помощью скобок.

Почему это происходит с точкой с запятой, но не без нее?

1 Ответ

0 голосов
/ 10 декабря 2018

Почему это происходит с точкой с запятой, но не без нее?

Chrome использует очень простой тест, чтобы определить, является ли строка литералом объекта или нет: выполняет ли строканачинать с { и заканчивать }?Если да, строка оценивается как выражение .

{ prop: p } = { prop: 'prop' }, которое проходит этот тест, но { prop: p } = { prop: 'prop' }; не проходит.


См. Странное поведение сравнения литералов объекта для получения дополнительной информации (другой ввод, та же причина).

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