ie8下Array不支持indexOf解决办法

今天碰到了一个ie8兼容性的bug,Array使用indexOf()报错,先介绍下indexOf的用法:

1
var indexVar = Array.indexOf(array, item, start);

搜索 Array 对象的指定元素并返回该元素的索引。
array: 要搜索的数组。
item: 要在数组中查找的对象。
startIndex:(可选)指定在数组中搜索的起始元素的索引号。

返回:
如果找到 item,则返回表示该元素在数组中的索引位置的编号;否则返回 -1。
在 Mozilla Firefox 中,如果调用 indexOf 时未设置 item 或将其设置为 undefined,则返回值为 undefined 的第一项的索引。 在同样的情况下,所有其他浏览器都返回 -1。

例如:

1
2
3
4
5
6
7
var a = ['red', 'blue', 'green', 'blue'];
var myFirstIndex = Array.indexOf(a, "blue");
// View the results: "1"
alert("myFirstIndex: " + myFirstIndex);
var mySecondIndex = Array.indexOf(a, "blue", (myFirstIndex + 1) );
// View the results: "3"
alert("mySecondIndex: " + mySecondIndex);

这个方法在ie9以及其它浏览器上都是没有问题的
在网上找到的解决ie8的方法
1.在使用indexOf()方法之前,先执行一下下面这个方法。如果没有定义就先定义。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//添加数组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()来替换Array.prototype.indexOf
例如:

1
2
var arr = [ 4, "Pete", 8, "John" ];
jQuery.inArray("John", arr); //3