ie8中原生js数组没有indexOf方法。
解决方法:
1.检查原生数组是否有indexOf这个方法,如果没有就加一个上去
//添加数组IndexOf方法if (!Array.prototype.indexOf){
Array.prototype.indexOf = function(elt /*, from*/){
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++){
if (from in this && this[from] === elt)
return from;
}
return -1;
};
}
2.使用jQuery中的jQuery.inArray()
var arr = [ 4, "Pete", 8, "John" ];
jQuery.inArray("John", arr); //3
jQuery.inArray(4, arr); //0
jQuery.inArray("David", arr); //-1
jQuery.inArray("Pete", arr, 2); //-1
使用第一种方法时要注意使用for in 方法,for in 方法会将原型链中可枚举的属性遍历出来(扩展的方法),就会造成遍历出的字段为undefined,因为原型链中的属性并没有你要找的属性
解决方法:
1.判断是自身的扩展方法还是有原型链继承过来的方法(Object.prototype.hasOwnProperty(“xxxxxx”)),通过原型链继承过来的属性是不能通过这个判断的,返回false;
2.可以在原型上扩展的时候,设置为不可枚举;
3.也可以判断枚举的属性中有没有想要的特定的属性,推荐第一种