ECMAScript | Условный оператор (Conditional Operator ? : )

ECMAScript | Условный оператор (Conditional Operator ? : )

Синтаксис условного оператора

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