1

可能重复:
为什么 indexOf 在数组 IE8 上不起作用?

我最近开发了一个使用原生 Javascript 和 jQuery 的脚本。我的大部分开发都是使用 IE 9、Chrome、Firefox。对于所有这些人来说,下面的行完美地工作:

if(data.cols.indexOf("footprint") < 0)

然而,今天我将一些代码推送到了生产系统,一些客户回来说他们的页面坏了。我已将搜索范围缩小到indexOf,显然 IE 8 一点也不喜欢。所以我试图找到一个替代方案,我发现了这一点Array.prototype.indexOf,但我不确定如何将它与上面类似的 if-else 联系起来。

此外,如果有更好的选择,那么我会全力以赴。另外,这是我可能必须仅适用于 IE 8 浏览器的东西,如果找到 IE 8,使用它,如果不使用原始浏览器?

4

1 回答 1

1

这个问题已经出现很多次了,可以在这里找到另一个 Stackoverflow 线程:How to fix Array indexOf() in JavaScript for Internet Explorer browsers

不同线程上的几个人建议使用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;
  };
}

只需在调用 indexOf() 之前运行此代码

于 2012-07-13T14:58:31.150 回答