Esempio n. 1
0
        /// <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));
        }