修复浏览器不支持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相同的功能
注:此扩展未经严格意义上的多浏览器测试,用于生产环境时请慎重!
世界 -- 因技术而精彩