如何修复 Internet Explorer 浏览器 JavaScript 中的 Array indexOf()

如果您使用过JavaScript,您就会知道Internet Explorer不会为Array.prototype.indexOf()(包括Internet Explorer 8)实现ECMAScript函数。这不是一个大问题,因为您可以使用以下代码扩展页面上的功能。

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

我应该何时实现它?

我是否应该通过以下检查将其包装在我的所有页面上,该检查检查原型函数是否存在,如果没有,请继续扩展数组原型?

if (!Array.prototype.indexOf) {

    // Implement function here

}

或者浏览器检查,如果它是Internet Explorer,那么就实现它?

//Pseudo-code

if (browser == IE Style Browser) {

     // Implement function here

}

答案 1

像这样做...

if (!Array.prototype.indexOf) {

}

根据 MDC 推荐的兼容性

通常,浏览器检测代码是一个很大的禁忌。


答案 2

或者,您可以使用 jQuery 1.2 inArray 函数,该函数应该可以跨浏览器工作:

jQuery.inArray( value, array [, fromIndex ] )