Синтаксис двоичных логических операторов
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