注意:编辑样本以反映我的实际问题,这是数组初始化中的尾随逗号。
似乎原始数组初始化和array.push的混合可能导致索引变得非常糟糕。
我这样做:
var iFeelLikeIt = true;
var items = ["thing1", "thing2",];
if (iFeelLikeIt) {
items.push("thing3");
}
items.push("thing4");
在IE7中,(尚未检查6或8),我的数组看起来像:
实际上,它看起来更像是一个按数字键入的字典,其键为0,1,3,4。
我已经将我的代码更改为只是初始化一个空数组并根据需要将所有内容推送到它上面,并且它的行为非常清晰。但是想知道是否有人知道这种行为的正当理由?或者某些东西至少闻起来像是一个有效理由的蹩脚借口。
答案 0 :(得分:15)
首先,如果我运行你的例子,它会显示一个错误,即thing1未定义。我想你想把它变成字符串? 然后,如果我尝试这样做,iFeelLikeIt也会抛出错误,导致它未定义。
我假设您在代码中写道:
var items = ["thing1", "thing2",];
检查数组末尾的最后一个逗号。 IE将其解释为新的未定义值,它将创建具有下一个值的数组:
thing1,thing2和undefined value。
没有比这更多的了。
答案 1 :(得分:0)
在IE8中正常工作。我没有任何IE7方便的机器重现,谷歌没有出现任何东西。不确定发生了什么。也许在初始化之后数组指针的顶部和push()
预期的位置之间有一个一个一个错误的错误?那将是我有道理的嗅觉蹩脚的借口。
答案 2 :(得分:0)
我相信你的问题可能在你的表达中被iFeelLikeIt取代。但是,您没有提供足够的信息来解决您的具体问题。也许如果您发布了工作代码,我们可以解决您的问题/错误/问题。