Javascript 对象、数组和$.each()
我以为我用arr建议的for var键解决了我的问题,但这在IE中造成了麻烦。现在我又回到了原点Javascript 对象、数组和$.each(),javascript,jquery,arrays,Javascript,Jquery,Arrays,我以为我用arr建议的for var键解决了我的问题,但这在IE中造成了麻烦。现在我又回到了原点 var myVariable = []; myVariable['option-1'] = 'something'; myVariable['option-2'] = 'something else'; $.each(myVariable, function(index, value) { alert(index + ': ' + value); }); 它不起作用。什么也看不出来。有人可以
var myVariable = [];
myVariable['option-1'] = 'something';
myVariable['option-2'] = 'something else';
$.each(myVariable, function(index, value) {
alert(index + ': ' + value);
});
它不起作用。什么也看不出来。有人可以编辑它使其工作吗?不需要jQuery。
只需将for..in循环与对象{}而不是数组[]一起使用即可:
只需使用对象而不是数组:
var myVariable = {};
更改var myVariable=[];到var myVariable={}
您正在使用的语法,myVariable['option-1']='something';用于对象,而不是数组。myVariable是数组。要向数组中添加内容,请使用myVariable.push'something'。您使用的是方括号语法,这是通常向对象添加属性的方式
由于数组是对象,您仍然可以访问选项1,但它不是数组的成员,而是对象的属性:myVariable['option-1'];//某物
解决方案是将myVariable设置为对象。jQuery的每个方法都将按预期迭代对象的属性。
相反,请使用对象文字:
数组方法不支持命名属性。使用对象{}而不是数组[]和用于。。。在Loop中,当代码在两个浏览器FF和Chrome中都能很好地工作,而在另一个IE中却完全不能工作时,这是令人困惑的。根据您所建议的更改,即使是IE似乎也能理解我的代码。tnx有趣的是,您可能遇到了jQuery bug;我会调查的。在任何情况下,如果需要命名键,则应始终使用对象。例如,添加了不存在的元素。如果对象/数组有两个元素myVariable['options-2']=3和myVariable['options-5']=1。然后在IE中,它会有第三个元素myVariable['indexOf'],该值是一个完整的函数。@RST我的IE技能有些生疏。你的意思是IE在Array.prototype上有indexOf作为可枚举属性吗?只有当我们谈论IEWith for…in…{alertkey…}时,才会在FF/Chrome中显示2个警报,在IE中显示3个警报。这是IE8 comp.模式,似乎是IE7
var myVariable = {};
var myVariable = {};
// ^^
myVariable['option-1'] = 'something';
…