Search code examples
javascriptarraysfunctioninternet-explorer-8internet-explorer-7

.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 IE9 debug console (used under both IE7 and IE8 Browser mode).

For the below comment, the code using .indexOf() is as follows:

if(shirt_colour == 'black') {
    p_arr=['orange','red','green','yellow','bblue','rblue','pink','white','silver','gold'];
    if( p_arr.indexOf(print_colour) != -1 ) rtn = true;
}

Solution

  • 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;
    
        var from = Number(arguments[1]) || 0;
        from = (from < 0)
             ? Math.ceil(from)
             : Math.floor(from);
        if (from < 0)
          from += len;
    
        for (; from < len; from++)
        {
          if (from in this &&
              this[from] === elt)
            return from;
        }
        return -1;
      };
    }
    

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