Какие на самом деле операторы выражений в ECMAScript

Предположим, что в какой-то момент процесса синтаксического анализа я уже прошел следующий вывод грамматики:

Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression

Вот и беда. Согласно спецификации, Expression в ExpressionStatement может закончиться только как AssignmentExpression или их последовательность. Однако такие утверждения, как

a;
12;
"some text";

определенно являются выражениями (насколько я понимаю), в то же время не являясь ни одним из возможных подтипов AssignmentExpression. Они не приводят к синтаксической ошибке в моих браузерах.

Это особенность конкретной реализации или механизма, что эти операторы возвращают значение, или мне что-то не хватает в спецификации? Может, это вовсе не AssignmentExpressions и я их принимаю за что-то другое?

Пункт 13.5 в разделе синтаксиса: ecma-international.org/ecma-262/#sec-expression-statement ссылается на 12.16, оператор запятой: ecma-international.org/ecma-262/#sec-comma-operator

WTEDST 29.09.2018 04:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы посмотрите на определение AssignmentExpression, вы увидите, что оно разрешается, например, в AssignmentExpression -> ConditionalExpression -> LogicalORExpression -> LogicalANDExpression -> BitwiseORExpression -> BitwiseXORExpression -> BitwiseANDExpression -> EqualityExpression -> RelationalExpression -> ShiftExpression -> AdditiveExpression -> MultiplicativeExpression -> ExponentiationExpression -> UnaryExpression -> UpdateExpression -> LeftHandSideExpression -> NewExpression -> MemberExpression -> PrimaryExpression -> Literal -> StringLiteral.

Итак, "some text" - действительный AssignmentExpression. То же самое и с другими литералами и ссылками на переменные.

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