Se você já trabalhou com JavaScript, sabe que o Internet Explorer não implementa a função ECMAScript para Array.prototype.indexOf () [incluindo o Internet Explorer 8]. Não é um problema enorme, porque você pode estender a funcionalidade da sua página com o seguinte 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;
}
Quando devo implementar isso?
Devo envolvê-lo em todas as minhas páginas com a seguinte verificação, que verifica se a função protótipo existe e, caso contrário, vá em frente e estenda o protótipo Array?
if (!Array.prototype.indexOf) {
// Implement function here
}
Ou verifique o navegador e, se for o Internet Explorer, basta implementá-lo?
//Pseudo-code
if (browser == IE Style Browser) {
// Implement function here
}
javascript
internet-explorer
internet-explorer-8
cross-browser
Bobby Borszich
fonte
fonte
Array.prototype.indexOf
não faz parte do ECMA-262 / ECMAScript. Veja ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf Talvez você esteja pensandoString.prototype.indexOf
...Array.indexOf
não leva em consideração índices iniciais negativos. Veja a implementação da lacuna de sugestões da Mozilla aqui: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Respostas:
Faça isso deste modo...
Conforme compatibilidade recomendada pelo MDC .
Em geral, o código de detecção do navegador é um grande não-não.
fonte
Como alternativa, você pode usar a função inArray do jQuery 1.2 , que deve funcionar nos navegadores:
fonte
O código completo seria então:
Para obter uma resposta e um código realmente completos, assim como outras funções da matriz, consulte a questão Stack Overflow, Fixando funções da matriz JavaScript no Internet Explorer (indexOf, forEach, etc.) .
fonte
A biblioteca underscore.js possui uma função indexOf que você pode usar:
fonte
Você deve verificar se não está definido usando
if (!Array.prototype.indexOf)
.Além disso, sua implementação de
indexOf
não está correta. Você deve usar em===
vez de==
em suaif (this[i] == obj)
declaração, caso contrário[4,"5"].indexOf(5)
seria 1 de acordo com sua implementação, o que está incorreto.Eu recomendo que você use a implementação no MDC .
fonte
Existe a solução oficial da Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
fonte
Eu recomendaria isso para quem procura falta de funcionalidade:
http://code.google.com/p/ddr-ecma5/
Ele traz a maioria das funcionalidades ausentes do ecma5 para os navegadores mais antigos :)
fonte
Esta foi a minha implementação. Essencialmente, adicione isso antes de qualquer outro script na página. ou seja, no seu mestre para uma solução global para o Internet Explorer 8. Também adicionei a função trim que parece ser usada em várias estruturas.
fonte
funciona para mim.
fonte
Com o Underscore.js
var arr=['a','a1','b'] _.filter(arr, function(a){ return a.indexOf('a') > -1; })
fonte