ECMAScript | Двоичные логические операторы (Binary Logical Operators)

ECMAScript | Двоичные логические операторы (Binary Logical Operators)

 

Синтаксис двоичных логических операторов

LogicalANDExpression [In, Yield, Await] :

BitwiseORExpression [?In, ?Yield, ?Await]

LogicalANDExpression [?In, ?Yield, ?Await] && BitwiseORExpression [?In, ?Yield, ?Await]

LogicalORExpression [In, Yield, Await] :

LogicalANDExpression [?In, ?Yield, ?Await]

LogicalORExpression [?In, ?Yield, ?Await] || LogicalANDExpression [?In, ?Yield, ?Await]

CoalesceExpression [In, Yield, Await] :

CoalesceExpressionHead [?In, ?Yield, ?Await] ?? BitwiseORExpression [?In, ?Yield, ?Await]

CoalesceExpressionHead [In, Yield, Await] :

CoalesceExpression [?In, ?Yield, ?Await]

BitwiseORExpression [?In, ?Yield, ?Await]

ShortCircuitExpression [In, Yield, Await] :

LogicalORExpression [?In, ?Yield, ?Await]

CoalesceExpression [?In, ?Yield, ?Await]

 

Примечание

Значение, полученное с помощью && или || Оператор не обязательно имеет тип Boolean. Полученное значение всегда будет значением одного из двух выражений операнда.

 

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

LogicalANDExpression : LogicalANDExpression && BitwiseORExpression

1. Пусть lref будет результатом вычисления LogicalANDExpression.
2. Пусть lval будет ? GetValue(lref).
3. Пусть lbool будет ! ToBoolean(lval).
4. Если lbool является false (ложно), вернуть lval.
5. Пусть rref будет результатом вычисления BitwiseORExpression.
6. Вернуть ? GetValue(rref).

LogicalORExpression : LogicalORExpression || LogicalANDExpression

1. Пусть lref будет результатом вычисления LogicalORExpression.
2. Пусть lval будет ? GetValue(lref).
3. Пусть lbool будет ! ToBoolean(lval).
4. Если lbool является true (истинно), вернуть lval.
5. Пусть rref будет результатом вычисления LogicalANDExpression.
6. Вернуть ? GetValue(rref).

CoalesceExpression : CoalesceExpressionHead ?? BitwiseORExpression

1. Пусть lref будет результатом вычисления CoalesceExpressionHead.
2. Пусть lval будет ? GetValue(lref).
3. Если lval является undefined (не определено) или null, тогда
   а. Пусть rref будет результатом вычисления BitwiseORExpression.
   b. Вернуть ? GetValue(rref).
4. В противном случае верните lval.

 

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

Стандарт ECMAScript — Раздел «13.13 Binary Logical Operators» — https://tc39.es/ecma262/#sec-binary-logical-operators