javascript - Internet Explorer 的数组 indexOf 实现

标签 javascript internet-explorer arrays indexof

关于如何将 indexOf 实现放入 Array 原型(prototype)以使其在 Internet Explorer 下工作,有很多解决方案,但是我偶然发现了一个问题,到目前为止我在任何地方都没有解决这个问题.

使用一致同意的 implementation at 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 函数代码的额外警告。

如何避免这种情况?

最佳答案

发生这种情况是因为在 IE 中,因为该方法不存在,所以它被添加到 Array.prototype 中,并且它仍然是可枚举的。

对于数组(通常是任何类似数组的对象),我不推荐使用for...in 语句。

为什么?

  • for...in 语句用于枚举对象属性。
  • 如您所见,for...in 语句沿原型(prototype)链向上爬行。
  • 迭代的顺序可以是任意的,迭代数组可能不会访问数字顺序中的元素。

最简单的方法,普通的 for 循环:

for (var j = 0; j < i.length; j++) {
    alert(i[j]);
}

另见:

关于javascript - Internet Explorer 的数组 indexOf 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2868696/

相关文章:

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

css - 在 IE7 和 IE8 中被剪切的页面

带有 .htc 行为文件和虚拟子域的 CSS

C# 向具有现有大小的数组添加和删除元素

c - 如何在 C 中创建对象数组?

javascript - node.js 回调函数作用域

javascript - 使用 ajax 和 php 下载文件 - readfile 不工作

javascript - jqueryeffect() 函数无法识别

css - 为什么在使用concat()时此Selenium XPath表达式无法返回结果?

arrays - 对具有异常值的数组进行排序的更好方法