Skip to content Skip to sidebar Skip to footer

.indexof Function On An Array Not Working In Ie7/8 Using Javascript

Can anyone tell me if IE 7 and IE 8 support the JavaScript .indexOf() method as I am receiving the error: SCRIPT438: Object doesn't support property or method 'indexOf' from the

Solution 1:

On IE<9 indexOf() it is not "well" implemented. Try to add this function on your code :

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    varfrom = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (frominthis &&
          this[from] === elt)
        returnfrom;
    }
    return -1;
  };
}

It will "replace" the original function, if not found in the ECMA-262 standard.

Solution 2:

Following code can be helpful.

functionfindIndexOf(findfrom, findthis) {
    for (i = 0; i < findfrom.length; i++) {
        if (findfrom[i] == findthis) {
            return i;
        }
    }
    return -1;
}

Solution 3:

If you need indexOf in IE<=8, you should consider using the following polyfill, which is recommended at the MDN :

// Production steps of ECMA-262, Edition 5, 15.4.4.14// Reference: http://es5.github.io/#x15.4.4.14if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {

    var k;

    // 1. Let o be the result of calling ToObject passing//    the this value as the argument.if (this == null) {
      thrownewTypeError('"this" is null or not defined');
    }

    var o = Object(this);

    // 2. Let lenValue be the result of calling the Get//    internal method of o with the argument "length".// 3. Let len be ToUint32(lenValue).var len = o.length >>> 0;

    // 4. If len is 0, return -1.if (len === 0) {
      return -1;
    }

    // 5. If argument fromIndex was passed let n be//    ToInteger(fromIndex); else let n be 0.var n = +fromIndex || 0;

    if (Math.abs(n) === Infinity) {
      n = 0;
    }

    // 6. If n >= len, return -1.if (n >= len) {
      return -1;
    }

    // 7. If n >= 0, then Let k be n.// 8. Else, n<0, Let k be len - abs(n).//    If k is less than 0, then let k be 0.
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

    // 9. Repeat, while k < lenwhile (k < len) {
      // a. Let Pk be ToString(k).//   This is implicit for LHS operands of the in operator// b. Let kPresent be the result of calling the//    HasProperty internal method of o with argument Pk.//   This step can be combined with c// c. If kPresent is true, then//    i.  Let elementK be the result of calling the Get//        internal method of o with the argument ToString(k).//   ii.  Let same be the result of applying the//        Strict Equality Comparison Algorithm to//        searchElement and elementK.//  iii.  If same is true, return k.if (k in o && o[k] === searchElement) {
        return k;
      }
      k++;
    }
    return -1;
  };
}

Post a Comment for ".indexof Function On An Array Not Working In Ie7/8 Using Javascript"