IE 8中的Javascript数组

据我所知,Javascript中的数组不过是方法和对象的组合。 现在我的任务是显示数组的值(比如
y_array
) 我使用了
for(x in y_array)
,然后显示了值。 在mozilla和IE中,它可以正常工作,但是在IE中,它显示数组的第一个元素,索引为
indexOf
,值是
indexOf(obj, from)
,这是我不想要的。 我试过了
if(x!=\'indexOf\') {  display the array value ; }
它工作正常,一切都很好,但是已经广泛使用了数组,我正在寻找一些永久性的修复方法,而不是这种硬编码的方法。 谁能帮帮我吗?     
已邀请:
您不是第一个混淆数组和对象的人。因此,应包含此类问题的常见问题解答;) 让我们尝试解释一下事情: 数组是一排值,可以使用它们在行中的位置来检索。数组值的顺序是固定的(可以重新排序)。 对象是一个变量,其中包含键-值对形式的命名属性。属于对象的键值对的顺序是任意的。 数组如下:
[ \'first\', \'second\', \'third\', ..., \'nth\' ]
对象看起来像:
{ first:\'firstvalue\', second:\'secondvalue\', ..., nth:\'nthvalue\' }
数组的第一个元素是索引为0的元素(因此行中的第一个位置的索引值为0)。使用
myArray[0]
检索 对象是无序的,因此它没有第一个元素。您可以使用
myObject.somekey
myObject[\'somekey\']
从其中检索任何元素。 对于数组,您可以使用循环遍历编号索引直到到达数组末尾的循环:
var i=0, len = myArray.length;
for ( i; i<len; i++ ) {
     //do something with >>> myArray[i] <<<
}
对于对象,请使用键和
in
运算符使用循环(确保仅使用
.hasOwnAttribute
方法检索对象的用户定义属性):
for ( var key in myObject ){
  if (myObject.hasOwnProperty(key)) {
     // do something with >>> myObject[key] <<<
  }
}
基本上,将数组想像成带有抽屉的橱柜,每个抽屉都包含一个值。可以想象一个对象是一堆箱子,盖子上有贴纸,描述了箱子的内容。您从一个物体取回东西,您问:x堆中是否有一个带有贴纸y的盒子,如果是,里面是什么?您要从数组中检索某些内容,请问:请给我抽屉nr x的内容。 现在关于您的问题:使用
for..in
循环检索值的数组包含一个用户定义的方法,即
indexOf
。使用对象样式循环,将数组视为对象,并同时显示
indexOf
键(我打赌像value17ѭ这样的值)。 IE这就是为什么在数组上进行迭代时最好使用带有数字索引的传统for循环。 为什么这仅在IE中?在现代浏览器中,
indexOf
Array
原型的本机方法,并且不显示本机方法(除非您遍历它们的原型)。 IE <9没有用于数组的本机indexOf方法。您在脚本中使用的某个位置,该方法已作为用户定义的扩展名添加到Array原型中。 问题的底线:不要使用ѭ20来遍历数组的值。     
对于数组,应使用以下for循环:
var y_array = [1,2,3,4];
for (var i = 0; i < y_array.length; i++) {
  var value = y_array[i];
  // do what you want
  alert(i + \': \' + value);
}
对于对象(对象就像关联数组-属性:值),请使用以下循环:
var y_array = { prop_1 : \"value a\", prop_2: \"value_2\", prop_3: 333 }
for (var key in y_array) {
   var value = y_array[key];
   // do what you want
   alert(key + \': \' + value);
}
    
如果您的json对象中没有值,例如jsobObj = {}。然后,在IE <9中,空对象旁边也显示了indexOf原型函数(我敢打赌,它的值也像function(){...})。 您可以在for Loop旁边检查条件。并跳过该indexOf。 if(key == \'indexOf \'){继续;} 例如:
var jsonObj = { key_1 : \"value a\", key_2: \"value_2\", key_3: 333 }
for (var key in y_array) {
if(key == \'indexOf\'){continue;}           // check if the array contain indexOf 
   var value = y_array[key];
   // do what you want
   alert(key + \': \' + value);
}
    

要回复问题请先登录注册