IE 8 问题中的 Javascript 数组

标签 javascript arrays methods internet-explorer-8 indexof

据我所知,Javascript 中的数组只不过是方法和对象的组合。

现在我的任务是显示数组的值(比如 y_array)

我使用了 for(x in y_array) 然后显示了值。

在 mozilla 和 IE 中它工作正常,但在 IE 中它显示数组的第一个元素,索引为 indexOf 并且值为 indexOf(obj, from) which我不想要。

我试过了

if(x!='indexOf') {  display the array value ; }

它起作用了,一切都很好,但是显示了数组的广泛使用,我正在寻找一些永久性修复而不是这个硬编码的修复。

谁能帮帮我?

最佳答案

您不是第一个混淆数组和对象的人。 SO 应该包含此类问题的常见问题解答;)

让我们试着解释一下:

数组 是一行值,可以使用它们在行中的位置来检索这些值。数组值的顺序是固定的(并且可以重新排序)。

对象 是一个包含键值对形式的命名属性的变量。属于一个对象的键值对的顺序是任意的。

数组如下所示:[ 'first', 'second', 'third', ..., 'nth' ]
一个对象看起来像:{ first:'firstvalue', second:'secondvalue', ..., nth:'nthvalue' }

数组的第一个元素是索引为 0 的元素(因此行中第一个位置的索引值为 0)。您使用 myArray[0]

检索它

一个对象是无序的,所以它没有第一个元素。您可以使用 myObject.somekeymyObject['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 键(我敢打赌,其值类似于 function(){...})也。 IE 这就是为什么在遍历数组时最好使用带有数字索引的传统 for 循环。

为什么这只在 IE 中?在现代浏览器中,indexOfArray 原型(prototype)的原生方法,并且不会显示原生方法(除非您循环遍历它们的原型(prototype))。 IE < 9 没有数组的原生 indexOf 方法。在脚本的某处,您使用的方法已作为用户定义的扩展添加到数组原型(prototype)中。

你的问题的底线:不要使用 for ... in 来遍历数组的值。

关于IE 8 问题中的 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5659591/

相关文章:

javascript - 在使用 substr 制作句子计数器时遇到问题

arrays - 如何连接以逗号分隔的命名范围的返回值

php - 如何从数组中提取和删除选定的变量?

javascript - 使用 CasperJS 和 PhantomJS 抓取 Google 关键字工具

javascript - Jquery 不会选择并将我想要的样式添加到我的元素

javascript - javascript 中的对象数组未按预期返回

ruby-on-rails - 从不同的 View 调用模型方法

java - 如何使用递归编写链表的 contains 方法? java

Android:如果已经运行,则停止方法被调用两次

javascript - 根据时间和组对数组进行排序