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 override IReference GetReference(IJsValue name) { var index = name.ToArrayIndex(); if (index.HasValue && (index >= 0)) { return GetElementReference(index.Value); } return base.GetReference(name.ToString()); }
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)); }
public virtual IReference GetReference(IJsValue name) { return GetReference(name.ToString()); }