我有这个在Firefox,Chrome和Safari中使用的javascript代码
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
答案 0 :(得分:5)
JavaScript for for / in构造传统上用于迭代对象成员名称,而不是数组索引。更具前瞻性的浏览器添加了隐藏属性等功能,以帮助像您期望的方式枚举Array这样的情况,但IE仍然以老派的方式进行,并在您使用时为您提供类似'toString'方法的Object成员/在一个数组上。
indexed-for仍然是规范的JavaScript数组循环。 (虽然你可能的意思是'for( var idx = ...','idx ++'更常见。)
答案 1 :(得分:2)
值得注意的是,诸如prototype.js之类的某些库扩展了Array,因此它们具有超出内部索引的附加属性。正如其他提到的那样,这会破坏x的y符号,IE会迭代属性。对于i = 0 ... i ++是首选。
另外值得注意的是jQuery,原型和其他提供了我真正喜欢的.each(fn)符号。
答案 2 :(得分:1)
我同意@bibince你可能应该使用“for(var i = 0...
”语法,但没有理由你选择的语法不起作用,除非你在创建{{1}时做了一些奇怪的事情}}。你是如何初始化你的阵列的?
JavaScript中的数组只是具有特殊自动递增功能的对象,但实际上它们与匿名对象没有太大区别。在Firebug中试试这个:
all_auction_ids
或将其粘贴到IE中的地址栏中,然后按Enter键:
var a = ['a','b','c'];
a.d = 'd';
for(var i in a) console.log(i, a[i]);
修改强>
我怀疑这是你的问题,但是如果你使用的话,你会遇到同样的问题:
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();
吗?
答案 3 :(得分:0)
This topic与您的问题密切相关。
答案 4 :(得分: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&lt; allClearInputs.length; ac = ac + 1){
使用:for(var ac in allClearInputs)