【问题标题】:IE8 enumerating array finds an index for the prototypeIE8 枚举数组找到原型的索引
【发布时间】:2013-12-06 07:13:30
【问题描述】:

我已经声明了一个数组:

var employeeBanks = 
[
    { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
    { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
    { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
    { validFromDate: '2013-02-01',    validToDate: '2014-01-31' },
];

当尝试遍历数组的每个成员时:

for (var a = 0; a < employeeBanks.length; a++)
{
   ...
}

我得到一个错误,因为我的数组中有一个额外的项目:

employeeBanks
   [0] = [object]
   [1] = [object]
   [2] = [object]
   [3] = [object]
   [prototype] = [object]

数组中的第 5 个元素无法识别。所以我得到一个错误。在 IE9、IE10 或边缘模式下运行 IE11,prototype 成员不出现(或在迭代数组时不出现)。

仅迭代数组成员的推荐技术是什么?未经我的许可,数组中可能会出现任何其他预期的东西吗?

奖励截图:

完整来源:

<!doctype html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<script type="text/javascript">
    var employeeBanks = 
        [
            { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
            { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
            { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
            { validFromDate: '2013-02-01',    validToDate: '2014-01-31' },
        ];
</script>
<body>
<p id="lblFoo">

<script type="text/javascript">
    for (var a = 0; a < employeeBanks.length; a++)
    {
       document.getElementById("lblFoo").innerText = "Test failed";
       document.getElementById("lblFoo").innerText = employeeBanks[a].validToDate;
    }
   document.getElementById("lblFoo").innerText = "Test complete";
</script>
</body>
</html>

删除&lt;meta http-equiv="X-UA-Compatible" content="IE=8" /&gt;,就可以了。

另见

【问题讨论】:

  • 我似乎没有得到这些结果...
  • 如何获取数组的元素?如果您使用的是employeeBanks[a] 之类的东西,我认为您无法访问“原型”属性。这不是数字。
  • @FelixKling 我也不明白。尝试将您的 IE 置于 IE8 文档模式。在接受的答案评论中添加了失败的 jsFiddle 示例。
  • 如果有适用于 OS X 的 IE,我会 ;)

标签: javascript arrays internet-explorer-8 ie8-browser-mode


【解决方案1】:

你的额外元素是由于额外的逗号。删除结束 ] 之前的逗号,您将在数组中拥有正确数量的元素。

var employeeBanks = 
[
    { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
    { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
    { validFromDate: '2013-01-01',    validToDate: '2013-12-31' },
    { validFromDate: '2013-02-01',    validToDate: '2014-01-31' }
];

【讨论】:

  • 为什么多余的逗号会添加一个属性名为“prototype”的元素?
  • 我的猜测是怪异来自用于调试问题的代码。根本原因仍然是结尾的逗号。
  • 好吧,我会被诅咒的。谁能想到。 jsFiddle。谁会想到 stackoverflow 上的人会在没有首先测试的情况下对正确答案投反对票。
  • @Ian:见stackoverflow.com/questions/7246618/…。但我本以为 IE8 会引发语法错误或类似的错误。
  • @FelixKling 它会引发对象文字的语法错误。对于数组,它会在末尾默默地添加另一个 undefined 项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多