4

我有这个 javascript 代码在 firefox、chrome 和 safari 中工作

for (idx in all_auction_ids){
    alert(all_auction_ids[idx]);
};

对于上述情况,all_auction_ids我得到的第一个值不是在 中获取值,而是看起来像 for 循环的函数类型的文本!

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

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

编辑:更新

我做了一些调试,发现添加 Orbited 和 stomp.js 可能正在对数组做一些事情!

现在我正在使用 Tracker1 的建议 jquery 的 $.each。

更多信息: http ://groups.google.com/group/orbited-users/browse_thread/thread/7fd658cfb166e9fa

有问题的数组 http://bayimg.com/fAnhaAaBb

阵列没有问题 http://bayimg.com/FaNhEAabb

4

5 回答 5

5

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

indexed-for 仍然是规范的 JavaScript 数组循环。(尽管您可能的意思是 'for ( var idx=...',而 'idx++' 更常见。)

于 2009-01-20T23:16:58.723 回答
2

值得注意的是,prototype.js 等一些库扩展了 Array,因此它们具有超出内部索引的附加属性。这打破了 x in y 表示法,正如其他提到的那样,IE 将迭代属性。对于 i=0...i++ 是首选。

另外值得注意的是 jQuery、prototype 和其他提供了我实际上更喜欢的 .each(fn) 表示法。

于 2009-01-20T23:50:43.350 回答
1

我同意@bibince 的观点,您可能应该使用 " for(var i = 0..." 语法,但没有理由认为您选择的语法不应该工作,除非您在创建all_auction_ids. 你是如何初始化你的数组的?

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();

如果这没有帮助,那么您能否发布更多代码,让我们更好地了解您的填充方式all_auction_ids

于 2009-01-20T23:37:15.437 回答
0

YUI 博客上的这个主题与您的问题密切相关。

于 2009-02-26T17:06:24.500 回答
0

我最近在为复选框列表创建“全选/全部清除”按钮时遇到了类似的问题。在 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();
            }
        }
    }
}

完美配合:for(ac=0;ac<allClearInputs.length;ac=ac+1){
惨遭失败:for(var ac in allClearInputs)

于 2010-06-04T15:29:21.010 回答