Jeśli kiedykolwiek pracowaliście z tablicami w javascript to pewnie natrafiliście na ten problem. Ja dopiero ostatnio natknąłem się na niego w trakcie jednego z projektów. Chyba pierwszy raz zacząłem korzystać po prostu z metody indexOf w tablicach, albo już zapomniałem, że kiedyś to robiłem.

Problem polega na tym, że IE < 9 nie implementuje w całości standardu ECMAScript – nie tylko indexOf nie jest zaimplementowany ale także forEach i pewnie inne metody. Każda próba wywołania takiej metody skończy się na wyjątku :(

By rozwiązać problem wystarczy wykorzystać następujący fragment kodu:

// fixing STUPID MICROSOFT IE ISSUE with indexOf 
if (!Array.prototype.indexOf) {

    Array.prototype.indexOf = function(obj, start) { 
        for (var i = (start || 0), j = this.length; i < j; i++) { 
            if (this[i] === obj) { 
                return i; 
            } 
        } 
        return -1; 
    }; 
}

autor: Internet :)

Sposób wykorzystania tak jak specyfikacja mówi:

var tab = [2, 5, 9];

var indexOf1 = tab.indexOf(9);

var indexOf2 = tab.indexOf(9, 1); // start from index 1

var indexOf3 = Array.prototype.indexOf.call(tab, 9);

Teraz już IE nie będzie się pluł :)

PS.: na Mozzila Developer Network można znaleźć inną implementację.