Abh*_*hvi 1 javascript arrays methods indexof internet-explorer-8
据我所知,Javascript中的数组只不过是方法和对象的组合.
现在我的任务是显示数组的值(比如说y_array)
我已经使用for(x in y_array)然后显示了该值.
在Mozilla和IE中它的工作正常,但在IE中它显示数组的第一个元素索引as indexOf和值是indexOf(obj, from)我不想要的.
我试过了
if(x!='indexOf') { display the array value ; }
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是已经广泛使用了数组,我正在寻找一些永久性修复,而不是这个硬编码.
谁能帮帮我吗?
Koo*_*Inc 10
你不是第一个混合数组和对象的人.SO应包含此类问题的常见问题解答;)
让我们试着解释一下:
一个阵列是值的行,这可以使用他们的行中的位置进行检索.数组值的顺序是固定的(并且可以重新排序).
的对象是包含在键-值对的形式命名属性的变量.属于对象的键值对的顺序是任意的.
数组看起来像:[ '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] <<<
}
Run Code Online (Sandbox Code Playgroud)
对于对象,使用键和in操作符使用循环(确保只使用方法检索对象的用户定义属性.hasOwnAttribute):
for ( var key in myObject ){
if (myObject.hasOwnProperty(key)) {
// do something with >>> myObject[key] <<<
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,将阵列视为带抽屉的橱柜,每个抽屉都包含一个值.一个物体可以被想象成一堆带盖上贴纸的盒子,描述盒子的内容.从一个物体中取出物品,你会问:在桩x中是否有一个带有贴纸y的盒子,如果有的话,它里面有什么?从数组中检索一些东西,你问:请给我抽屉nr x的内容.
现在您的问题是:您使用for..in循环检索值的数组包含用户定义的方法,即indexOf.使用对象样式循环,数组被视为对象,并且也显示indexOf键(具有像function(){...}我下注的值).IE这就是为什么在迭代数组时使用带有数字索引的传统for循环可能会更好.
为什么这只在IE中?在现代浏览器中indexOf是Array原型的本机方法,并且未显示本机方法(除非您循环遍历其原型).IE <9没有用于数组的本机indexOf方法.在您使用的脚本中,该方法已作为用户定义的扩展添加到Array原型中.
问题的底线:不要for ... in用于遍历数组的值.
对于数组,您应该使用此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);
}
Run Code Online (Sandbox Code Playgroud)
对于对象(对象就像关联数组 - property: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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14901 次 |
| 最近记录: |