IE8问题中的Javascript数组
据我所知,Javascript中的数组只是方法和对象的组合 现在我的任务是显示数组的值(比如说IE8问题中的Javascript数组,javascript,arrays,methods,internet-explorer-8,indexof,Javascript,Arrays,Methods,Internet Explorer 8,Indexof,据我所知,Javascript中的数组只是方法和对象的组合 现在我的任务是显示数组的值(比如说y\u array) 我使用了(y_数组中的x)的,,然后显示了值 在mozilla和IE中,它工作正常,但在IE中,它显示数组的第一个元素,索引为indexOf,值为indexOf(obj,from),这是我不想要的 我试过了 if(x!='indexOf') { display the array value ; } 它的工作和事情是好的,但有广泛的使用阵列显示,我正在寻找一些永久性的修复,而不
y\u array
)
我使用了(y_数组中的x)的,
,然后显示了值
在mozilla和IE中,它工作正常,但在IE中,它显示数组的第一个元素,索引为indexOf
,值为indexOf(obj,from)
,这是我不想要的
我试过了
if(x!='indexOf') { display the array value ; }
它的工作和事情是好的,但有广泛的使用阵列显示,我正在寻找一些永久性的修复,而不是这个硬编码的一个
有人能帮我吗 对于阵列,应使用以下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);
}
对于阵列,应使用以下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);
}
你不是第一个把数组和对象混在一起的人。因此,应包含此类问题的常见问题解答;) 让我们试着解释一下: 数组是一行值,可以使用它们在行中的位置来检索。数组值的顺序是固定的(并且可以重新排序) 对象是一个变量,它包含键值对形式的命名属性。属于对象的键值对的顺序是任意的 数组看起来像:
['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] <<<
}
基本上,将数组视为一个带抽屉的橱柜,每个抽屉都包含一个值。一个物体可以想象为一堆盒子,盖子上贴着标签,描述盒子的内容。从一个物体上取回一些东西,你会问:在x堆里有一个贴纸y的盒子吗?如果有,盒子里有什么?从数组中检索某些内容时,您会问:请给我抽屉nr x的内容
现在,关于您的问题:您正在使用for..in
循环检索值的数组包含一个用户定义的方法,即indexOf
。对其使用对象样式循环,数组被视为对象,并且显示indexOf
键(具有类似function(){…}
I bet的值)。这就是为什么在迭代数组时,最好使用带有数字索引的传统for循环
为什么这只在IE中?在现代浏览器中,indexOf
是Array
prototype的本机方法,本机方法不会显示(除非您循环遍历它们的原型)。IE<9没有用于数组的本机indexOf方法。在脚本中的某个地方,您使用的方法已作为用户定义的扩展添加到阵列原型中
你的问题的底线是:不要将
用于。。。在
中循环数组的值。您不是第一个将数组和对象混合在一起的人。因此,应包含此类问题的常见问题解答;)
让我们试着解释一下:
数组是一行值,可以使用它们在行中的位置来检索。数组值的顺序是固定的(并且可以重新排序)
对象是一个变量,它包含键值对形式的命名属性。属于对象的键值对的顺序是任意的
数组看起来像:['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] <<<
}
基本上,将数组视为一个带抽屉的橱柜,每个抽屉都包含一个值。一个物体可以想象为一堆盒子,盖子上贴着标签,描述盒子的内容。从一个物体上取回一些东西,你会问:在x堆里有一个贴纸y的盒子吗?如果有,盒子里有什么?从数组中检索某些内容时,您会问:请给我抽屉nr x的内容
现在,关于您的问题:您正在使用for..in
循环检索值的数组包含一个用户定义的方法,即indexOf
。对其使用对象样式循环,数组被视为对象,并且显示indexOf
键(具有类似function(){…}
I bet的值)。这就是为什么在迭代数组时,最好使用带有数字索引的传统for循环
为什么这只在IE中?在现代浏览器中,indexOf
是Array
prototype的本机方法,本机方法不会显示(除非您循环遍历它们的原型)。IE<9没有用于数组的本机indexOf方法。在脚本中的某个地方,您使用的方法已作为用户定义的扩展添加到阵列原型中
你的问题的底线是:不要将
用于。。。在
中循环数组的值。如果json对象中没有值,如JSOBBJ={}。然后在IE<9中的空对象中获得了原型函数的indexOf。(使用类似函数()的值,{…}我打赌)也会显示
您可以在for循环的一侧检查一个条件。跳过那个索引<
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);
}