奇怪的IE7JavaScript问题

奇怪的IE7JavaScript问题,javascript,internet-explorer-7,stomp,orbited,Javascript,Internet Explorer 7,Stomp,Orbited,我在firefox、chrome和safari中使用了这些javascript代码 for (idx in all_auction_ids){ alert(all_auction_ids[idx]); }; 对于上面的例子,我得到的第一个值不是all\u auction\u id中的值,而是类似于for循环的函数类型的文本 但是如果我运行下面的代码,它就可以正常工作 for (idx=0;idx<all_auction_ids.length;idx=idx+1){ ale

我在firefox、chrome和safari中使用了这些javascript代码

for (idx in all_auction_ids){
    alert(all_auction_ids[idx]);
};
对于上面的例子,我得到的第一个值不是
all\u auction\u id
中的值,而是类似于for循环的函数类型的文本

但是如果我运行下面的代码,它就可以正常工作

for (idx=0;idx<all_auction_ids.length;idx=idx+1){
    alert(all_auction_ids[idx]);
};
for(idx=0;idx

与问题有关的数组

没有问题的数组

JavaScript的for/in结构传统上用于迭代对象成员名称,而不是数组索引。更具前瞻性的浏览器添加了隐藏属性等功能,以帮助像数组这样的情况以您期望的方式枚举,但IE仍然采用传统的方式,并为您提供像“toString”方法这样的对象成员在数组上使用for/in时的od


索引的for仍然是规范的JavaScript数组循环(虽然您可能指的是'for(varidx=…',而'idx++'更常见)。

我同意@bibince的观点,您可能应该使用“
for(var I=0…
”语法,但没有理由认为您选择的语法不起作用,除非您在创建
所有\u拍卖\u id
时做了一些奇怪的事情。您如何初始化数组

JavaScript中的数组只是具有特殊自动递增功能的对象,但实际上它们与匿名对象没有太大区别。请在Firebug中尝试:

var a = ['a','b','c'];
a.d = 'd';
for(var i in a) console.log(i, a[i]);
或者将其粘贴到IE中的地址栏中,然后按enter键:

javascript:var a = ['a']; a.d = 'd'; for(var i in a) alert(a[i]); alert(a.length);
编辑:

我怀疑这是您的问题,但如果您使用:

var all_auction_ids = [];
而不是

var all_auction_ids = new Array();

如果这没有帮助,那么您是否可以发布更多的代码,让我们更好地了解如何填充
所有拍卖ID

值得注意的是,一些库(如prototype.js)扩展了数组,以便它们在内部索引之外具有额外的属性。这与其他库一样,打破了x-in-y表示法提到,IE将迭代属性。对于i=0,首选i++


同样值得注意的是,jQuery、prototype和其他工具提供了一个。我实际上更喜欢的每一个(fn)符号。

在YUI博客上与您的问题密切相关。

我最近在创建“全选/全清”时遇到了类似的问题用于复选框列表的按钮。在Firefox和Chrome中,它们可以正常工作,但在IE7/8中则不行。我没有使用任何框架或外部库,所有JavaScript都是我自己的,非常简单,没有太多内容。我使用getElementsByTagName构建输入元素数组,然后循环:

var allClearInputs = document.getElementsByTagName("input");
for(ac=0;ac<allClearInputs.length;ac=ac+1){
    if(allClearInputs[ac].id){
        var thisNameArr = allClearInputs[ac].id.split("-");
        var thisName = thisNameArr[0];
        if(thisName == checkName){
            if((actionType == 'all' && allClearInputs[ac].checked == false) || (actionType == 'clear' && allClearInputs[ac].checked == true)){
                allClearInputs[ac].click();
            }
        }
    }
}
var allClearInputs=document.getElementsByTagName(“输入”);

for(ac=0;acu-auction_-id是什么?它是如何创建的?如果从“for”块的末尾删除分号,会得到同样的结果吗?我同意“for(var I=0…”方法更适合索引数组,但IE始终支持“for(var I in…”迭代器,因为数组对象毕竟只是一个具有自动递增功能的对象。@kevin:不是“应该”,是的!这里还发生了其他事情,我认为我们还没有得到足够的详细信息…@bobince,你最后一次看到IE使用for/in在数组中返回“toString”是什么时候?我想我从来没有见过,回到IE5…嗯,你是对的,toString似乎已经消失了一段时间。不过也有机会发生一些事情可以添加到Array.prototype…实际上,如果您运行的JavaScript框架只是喜欢将方法喷洒到原型中,这是肯定的。@bobince,这当然是真的。@mark(@kevin?),您是否使用任何JavaScript库(例如jQuery、prototype.js、Mootools或自制的工具)?Prestaul:我只在IE(7和8)中遇到这个问题,在firefox中没有。all_auction_ids=new Array();我用这种方式向它添加数据。all_auction_ids.push(id);它在safari中运行良好/ffox@kevin:我已经更新了我的帖子。我想我应该先将声明更改为var all_auction_id=[];并删除for块后的分号。这可能不是您的问题,但我们可能需要更详细的信息来解决。此外,您可以添加一个“var”…即“for(var idx in…”