public static bool SameValue(JsValue x, JsValue y) { var typea = TypeConverter.GetPrimitiveType(x); var typeb = TypeConverter.GetPrimitiveType(y); if (typea != typeb) { return(false); } if (typea == Types.None) { return(true); } if (typea == Types.Number) { var nx = TypeConverter.ToNumber(x); var ny = TypeConverter.ToNumber(y); if (double.IsNaN(nx) && double.IsNaN(ny)) { return(true); } if (nx.Equals(ny)) { if (nx.Equals(0)) { // +0 !== -0 return(NumberInstance.IsNegativeZero(nx) == NumberInstance.IsNegativeZero(ny)); } return(true); } return(false); } if (typea == Types.String) { return(TypeConverter.ToString(x) == TypeConverter.ToString(y)); } if (typea == Types.Boolean) { return(TypeConverter.ToBoolean(x) == TypeConverter.ToBoolean(y)); } return(x == y); }