LogicalANDExpression :
BitwiseORExpression
LogicalANDExpression && BitwiseORExpression
LogicalANDExpressionNoIn :
BitwiseORExpressionNoIn
LogicalANDExpressionNoIn && BitwiseORExpressionNoIn
LogicalORExpression :
LogicalANDExpression
LogicalORExpression || LogicalANDExpression
LogicalORExpressionNoIn :
LogicalANDExpressionNoIn
LogicalORExpressionNoIn || LogicalANDExpressionNoIn
function evaluate(LogicalORExpression && LogicalANDExpression) {
var lref = evaluate(LogicalANDExpression);
var lval = GetValue(lref);
if (!ToBoolean(lval)) return lval;
var rref = evaluate(BitwiseORExpression);
return GetValue(rref);
}
function evaluate(LogicalORExpression || LogicalANDExpression) {
var lref = evaluate(LogicalORExpression );
var lval = GetValue(lref);
if (ToBoolean(lval)) return lval;
var rref = evaluate(LogicalANDExpression);
return GetValue(rref);
}
The NoIn versions behave identical.