Почему этот JavaScript не интерпретируется как блок кода при использовании точки с запятой?

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

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

Таким образом, строка кода неожиданно интерпретируется как выражение выражения.

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

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

Это ожидается с самого начала { говорит JavaScript двигатель, что это блок кода, если мы не устраняем неоднозначность с круглыми скобками.

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

1 ответ

Решение

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

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

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


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

Другие вопросы по тегам