修复浏览器不支持Array自带的indexOf方法的扩展

JavaScript中Array的indexOf方法支持的浏览器有:IE9+、Firefox 2+、Safari 3+、Opera 9.5+和Chrome

如果想要在不支持的浏览器中使用indexOf方法,可以使用如下的方式进行扩展:

方法一:使用jQuery的$.inArray方法扩展Array方法(使用的jQuery版本是1.11.3版本)

1 if(!Array.prototype.indexOf) {
2   Array.prototype.indexOf = function(value, from) {
3     return $.inArray(value, this, from);
4   }
5 }

BUT,jQuery的$.inArray方法与Array自带的indexOf还是有差异的,使用如下代码进行测试:

1 var arr = [1, 2, 3, 'cc', 'dd'];
2 console.info(arr.indexOf(3));
3 console.info(arr.indexOf(2,3));
4 console.info(arr.indexOf(2,-7));
5 console.info(arr.indexOf('dd',-2.6));
6 console.info(arr.indexOf(2,-2.999999));
7 console.info(arr.indexOf('cc',-3));
$.inArray方法输出:2, -1, 1, -1, -1, 3
Array自带方法输出:2, -1, 1, 4, -1, 3
方法二:自己扩展Array的indexOf方法
 1 if (!Array.prototype.indexOf){
 2   Array.prototype.indexOf = function(value, from){
 3     var len = this.length >>> 0;
 4 
 5     // 索引必须为整数,忽略小数尾数
 6     var from = parseInt(from) || 0;
 7 
 8     // 当索引小于0时,加上一次数组长度
 9     from = from < 0 ? from + len : from;
10 
11     for (; from < len; from++){
12       if (from in this && this[from] === value)
13       return from;
14     }
15     return -1;
16   };
17 }

经测试,在IE7+均能获得与Array自带的indexOf相同的功能

注:此扩展未经严格意义上的多浏览器测试,用于生产环境时请慎重!

原文地址:https://www.cnblogs.com/TwinklingZ/p/5973757.html