Si ha trabajado con JavaScript por algún tiempo, sabe que Internet Explorer no implementa la función ECMAScript para Array.prototype.indexOf () [incluido Internet Explorer 8]. No es un gran problema, porque puede ampliar la funcionalidad de su página con el siguiente código.
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;
}
¿Cuándo debo implementar esto?
¿Debo envolverlo en todas mis páginas con la siguiente verificación, que verifica si la función del prototipo existe y si no, continúe y extienda el prototipo de matriz?
if (!Array.prototype.indexOf) {
// Implement function here
}
¿O comprueba el navegador y si es Internet Explorer, simplemente impleméntelo?
//Pseudo-code
if (browser == IE Style Browser) {
// Implement function here
}
javascript
internet-explorer
internet-explorer-8
cross-browser
Bobby Borszich
fuente
fuente
Array.prototype.indexOf
no es parte de ECMA-262 / ECMAScript. Ver ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf Quizás estés pensandoString.prototype.indexOf
...Array.indexOf
no tiene en cuenta los índices iniciales negativos. Vea la implementaciónRespuestas:
Hazlo asi...
Según la compatibilidad recomendada por MDC .
En general, el código de detección del navegador es un gran no-no.
fuente
Alternativamente, puede usar la función jQuery 1.2 inArray , que debería funcionar en todos los navegadores:
fuente
El código completo sería este:
Para obtener una respuesta y un código realmente completos para esto, así como para otras funciones de matriz, consulte la pregunta sobre desbordamiento de pila. Cómo arreglar las funciones de matriz de JavaScript en Internet Explorer (indexOf, forEach, etc.) .
fuente
La biblioteca underscore.js tiene una función indexOf que puede usar en su lugar:
fuente
Debe verificar si no está definido usando
if (!Array.prototype.indexOf)
.Además, su implementación de
indexOf
no es correcta. Debe usar en===
lugar de==
en suif (this[i] == obj)
declaración, de lo contrario[4,"5"].indexOf(5)
sería 1 de acuerdo con su implementación, lo cual es incorrecto.Le recomiendo que use la implementación en MDC .
fuente
Hay una solución oficial de Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
fuente
Recomendaría esto a cualquiera que busque la funcionalidad faltante:
http://code.google.com/p/ddr-ecma5/
Trae la mayor parte de la funcionalidad ecma5 que falta a los navegadores más antiguos :)
fuente
Esta fue mi implementación. Básicamente, agregue esto antes que cualquier otro script en la página. es decir, en su maestro para una solución global para Internet Explorer 8. También agregué la función de recorte que parece usarse en una gran cantidad de marcos.
fuente
esto funciona para mi.
fuente
Con el Underscore.js
var arr=['a','a1','b'] _.filter(arr, function(a){ return a.indexOf('a') > -1; })
fuente