有很多关于如何将 indexOf 实现放入 Array 原型以便它在 Internet Explorer 下工作的解决方案,但是我偶然发现了一个问题,到目前为止我似乎在任何地方都没有解决这个问题。
使用在 MDC上达成一致的实现,我现在有以下代码存在问题:
// indexOf support for IE (from MDC)
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;
};
}
var i = [1,2,3,4];
for (j in i)
{
alert(i[j]);
}
我预计会收到 4 个警报,每个警报都包含数组的一个元素。在 Firefox 和 Chrome 中,这正是我所看到的,但是在 IE8 中,我收到了一个包含 indexOf 函数代码的附加警报。
可以做些什么来避免这种情况?