2010-01-05 20 views
4

注意:编辑样本以反映我的实际问题,这是数组初始化中的尾随逗号。这个IE array.push错误有一个理智的原因吗?

看起来,原始数组初始化和array.push的混合可以导致索引得到所有whacky。

我这样做:

var iFeelLikeIt = true; 
var items = ["thing1", "thing2",]; 
if (iFeelLikeIt) { 
    items.push("thing3"); 
} 
items.push("thing4"); 

在IE7中,(还没有检查6或8个),我的数组是这样的:

  • thing1
  • thing2
  • 不确定
  • thing3
  • thing4

实际上,它看起来更像是一个按键编号字典,其键为0,1,3,4。

我已经将我的代码更改为初始化一个空数组,并根据需要将所有内容都推送到它上面,并且它表现得很健全。但是想知道是否有人知道这种行为的正当理由?或者是出于正当理由,至少听起来像是一个蹩脚的借口。

+1

不,没有理由会发生这种情况,而且它不会以任何方式重现。完整的测试案例证明错误的行为? – bobince 2010-01-05 00:37:46

回答

15

首先,如果我运行你的例子,它显示了一个错误,thing1是未定义的。我想你想把它作为字符串? 然后,如果我尝试这样做,iFeelLikeIt也会抛出错误,导致它不确定。

我假设你在你的代码本中写道:

var items = ["thing1", "thing2",]; 

检查在数组的末尾最后一个逗号。 IE将其解释为新的未定义值,它将创建具有下一个值的数组:

thing1,thing2和未定义的值。

没有什么比这更多。

+1

我肯定会检查一个额外的逗号,因为nemisj是正确的关于IE解释为一个未定义的值。 – sberry 2010-01-05 00:48:54

+0

当多余的逗号遇到IE通常崩溃 – 2010-01-05 02:15:47

+0

我也猜这 – 2010-01-05 02:48:07

0

在IE8中正常工作。我没有任何可以方便地复制IE7的机器,Google也没有提供任何东西。不知道发生了什么事。也许在数组指针的顶部位于初始化之后,以及其中push()期待它的位置之间存在错误的错误?那将是我有效的理由气味的蹩脚借口。

0

我相信你的问题可能在你的表达中被iFeelLikeIt取代。但是,您没有包含足够的信息来解决您的具体问题。也许如果你发布了工作代码,我们可以解决你的问题/错误/问题。

相关问题