如何修复JavaScript中的Internet Explorer浏览器的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;
}

我应该什么时候执行这个?

我是否应该使用以下检查将其包装在我的所有页面上,检查原型函数是否存在,如果不存在,继续并扩展Array原型?

if (!Array.prototype.indexOf) {

    // Implement function here

}

或者浏览器检查,如果它是Internet Explorer然后只是实现它?

//Pseudo-code

if (browser == IE Style Browser) {

     // Implement function here

}

像这样做...

if (!Array.prototype.indexOf) {

}

由MDC建议的兼容性。

一般来说,浏览器检测代码是一个很大的禁忌。


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

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

完整的代码会是这样的:

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

对于这个以及其他数组函数的真正彻底的答案和代码,请查看Stack Overflow问题修复Internet Explorer中的JavaScript数组函数(indexOf,forEach等)。

链接地址: http://www.djcxy.com/p/18949.html

上一篇: How to fix Array indexOf() in JavaScript for Internet Explorer browsers

下一篇: How to restore a whole directory from history of git repository?