Почему этот 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' };
не.
См. Нечетное поведение сравнения литералов объекта для получения дополнительной информации (другой ввод, та же причина).