ECMAScript | Оператор if

ECMAScript | Оператор if

Синтаксис оператора if

IfStatement [Yield, Await, Return] :

if ( Expression [+In, ?Yield, ?Await] ) Statement [?Yield, ?Await, ?Return] else Statement [?Yield, ?Await, ?Return]

if ( Expression [+In, ?Yield, ?Await] ) Statement [?Yield, ?Await, ?Return] [lookahead ≠ else]

Примечание

Ограничение просмотра вперед [lookahead ≠ else] решает классическую проблему «висящего ИНАЧЕ» обычным способом. То есть, когда выбор связанного if в остальном неоднозначен, else связан с ближайшим (самым внутренним) из кандидата if.

 

14.6.1 Статическая семантика: Ранние Ошибки

IfStatement : if ( Expression ) Statement else Statement

  • Это синтаксическая ошибка, если IsLabelledFunction(первое утверждение Statement) истинно (является true).
  • Это синтаксическая ошибка, если IsLabelledFunction(второе утверждение Statement) истинно (является true).

IfStatement : if ( Expression ) Statement

Примечание

Это правило необходимо применять только в том случае, если реализовано расширение, указанное в B.3.1.

 

14.6.2 Семантика времени выполнения: Оценка

IfStatement : if ( Expression ) Statement else Statement

1. Пусть exprRef будет результатом вычисления Expression.
2. Пусть exprValue будет ! ToBoolean(? GetValue(exprRef)).
3. Если exprValue истинно (является true), тогда
   а. Пусть stmtCompletion будет результатом вычисления первого утверждения Statement.
4. Иначе,
   а. Пусть stmtCompletion будет результатом вычисления второго утверждения Statement.
5. Вернуть завершение Completion(UpdateEmpty(stmtCompletion, undefined)).

IfStatement : if ( Expression ) Statement

1. Пусть exprRef будет результатом вычисления Expression.
2. Пусть exprValue будет ! ToBoolean(? GetValue(exprRef)).
3. Если exprValue ложно (является false), тогда
   а. Вернуть NormalCompletion(undefined).
4. Иначе,
   а. Пусть stmtCompletion будет результатом вычисления Statement.
b. Вернуть Завершение Completion(UpdateEmpty(stmtCompletion, undefined)).

 

 

Информационные ссылки

Стандарт ECMAScript — Раздел «14.6 The if Statement» — https://tc39.es/ecma262/#sec-if-statement