/// <summary> /// 15.4.4.15 /// </summary> /// <param name="target"></param> /// <param name="parameters"></param> /// <returns></returns> public JsInstance IndexOfImpl(JsObject target, JsInstance[] parameters) { if (parameters.Length == 0) { return(Global.NumberClass.New(-1)); } int len = (int)target["length"].ToNumber(); if (len == 0) { return(Global.NumberClass.New(-1)); } int n = 0; if (parameters.Length > 1) { n = Convert.ToInt32(parameters[1].ToNumber()); } int k; if (n >= len) { return(Global.NumberClass.New(-1)); } JsInstance searchParameter = parameters[0]; if (n >= 0) { k = n; } else { k = len - Math.Abs(n); } while (k < len) { JsInstance result = null; if (target.TryGetProperty(k.ToString(), out result)) { if (JsInstance.StrictlyEquals(Global, result, searchParameter) == Global.BooleanClass.True) { return(Global.NumberClass.New(k)); } } k++; } return(Global.NumberClass.New(-1)); }