Синтаксис условного оператора
ConditionalExpression [In, Yield, Await] :
ShortCircuitExpression [?In, ?Yield, ?Await]
ShortCircuitExpression [?In, ?Yield, ?Await] ? AssignmentExpression [+In, ?Yield, ?Await] : AssignmentExpression [?In, ?Yield, ?Await]
Грамматика для ConditionalExpression в ECMAScript немного отличается от грамматики в C и Java, каждая из которых позволяет второму подвыражению быть Expression, но ограничивает третье выражение как ConditionalExpression. Мотивация для этого различия в ECMAScript состоит в том, чтобы позволить выражению присваивания управлять любой частью условного выражения и устранить запутанный и довольно бесполезный случай выражения запятой в качестве центрального выражения.
Семантика времени выполнения: оценка
ConditionalExpression : ShortCircuitExpression ? AssignmentExpression : AssignmentExpression
1. Пусть lref будет результатом вычисления ShortCircuitExpression. 2. Пусть lval будет ! ToBoolean(? GetValue(lref)). 3. Если lval является true (истинно), то а. Пусть trueRef будет результатом вычисления первого AssignmentExpression. b. Вернуть ? GetValue(trueRef). 4. Иначе, а. Пусть falseRef будет результатом вычисления второго AssignmentExpression. b. Вернуть ? GetValue(falseRef).
Информационные ссылки
Стандарт ECMAScript — Раздел «13.14 Conditional Operator ( ? : )» — https://tc39.es/ecma262/#sec-conditional-operator