Comment fixer le Tableau indexOf() en JavaScript pour les navigateurs Internet Explorer

Si vous avez travaillé avec JavaScript dans la longueur que vous êtes conscient que Internet Explorer ne permet pas de mettre en œuvre les ECMAScript fonction de la Matrice.le prototype.indexOf() [y compris Internet Explorer 8]. Il n'est pas un énorme problème, parce que vous pouvez étendre les fonctionnalités de votre page avec le code suivant.

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;
}

Quand dois-je mettre en œuvre cette?

Dois-je l'enrouler sur toutes mes pages avec le cocher suivantes, qui vérifie si le prototype de la fonction existe et si non, aller de l'avant et d'étendre le Tableau prototype?

if (!Array.prototype.indexOf) {

    //Implement function here

}

Ou faire de vérification du navigateur et si c'est Internet Explorer puis il suffit de la mettre en œuvre?

//Pseudo-code

if (browser == IE Style Browser) {

     //Implement function here

}
  • En fait Array.prototype.indexOf ne fait pas partie de l'ECMA-262/ECMAScript. Voir ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf Peut-être que vous êtes en train de penser String.prototype.indexOf...
  • C'est une extension, ne fait pas partie de la norme d'origine. Il devrait, cependant, être mis en œuvre dans le cadre de Javascript 1.6 (qui IE ne parvient pas à faire) developer.mozilla.org/en/New_in_JavaScript_1.6
  • a été juste se référant à "c'est à dire ne pas mettre en œuvre l'ECMAScript fonction..."
  • Votre mise en œuvre de Array.indexOf ne pas prendre négatif de départ indices en compte. Voir Mozilla suggestion pour combler les lacunes de mise en œuvre ici: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
  • J'ai mis à jour la question d'utiliser "===", parce que j'ai peur que les gens vont le copier avec le "==" et qui serait une erreur - d'autres que c'est la fin. Voir Eli Gris de la réponse.
  • En Fait, Tableau.le prototype.indexOf est une partie de ECMAScript 5 (où le lien à la norme maintenant, va): "15.4.4.14 Tableau.le prototype.indexOf ( searchElement [ , fromIndex ] )"