你的位置:首页 > Java教程

[Java教程]修复浏览器不支持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相同的功能

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