public static IJsValue Add(IEnvironment environment, IJsValue lhs, IJsValue rhs) { if ((lhs.ToPrimitive() is string) || (rhs.ToPrimitive() is string)) { return environment.CreateString(lhs.ToString() + rhs.ToString()); } return ArithEval(environment, lhs, rhs, (l, r) => l + r); }
public static IJsValue RelationalEval(IEnvironment environment, IJsValue lhs, IJsValue rhs, Func<double, double, bool> relationalOperator, Func<string, string, bool> stringRelationalOperator) { if ((lhs.ToPrimitive() is string) || (rhs.ToPrimitive() is string)) { return environment.CreateBool(stringRelationalOperator(lhs.ToString(), rhs.ToString())); } var ln = lhs.ToNumber(); if (double.IsNaN(ln)) { return JsUndefined.Value; } var rn = rhs.ToNumber(); if (double.IsNaN(rn)) { return JsUndefined.Value; } return environment.CreateBool(relationalOperator(ln, rn)); }