JavaScript indexOf vs Array.prototype.indexOf IE兼容性错误

时间:2012-07-12 18:40:36

标签: javascript jquery internet-explorer

  

可能重复:
  Why doesn't indexOf work on an array 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,使用它,如果不使用原来的?

1 个答案:

答案 0 :(得分:1)

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

不同主题上有几个人建议使用this code 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;
  };
}

在进行任何调用indexOf()

之前,只需运行此代码