用于... in循环的JavaScript具有奇怪的结果

时间:2012-04-04 19:07:09

标签: javascript jquery for-loop

我有以下对象:

var r = {
    obj: $(this),
    children: $(this).children(),
    panes: $('.rotatorPane', $(this)),
    tagNames : [],
    captions: [],
    subcaptions: []     
};

$(this)指的是以下div:

<div class="myRotator">
    <div class="rotatorPane">

    </div>
    <div class="rotatorPane" id="pane3">

    </div>

    <img src="img/1.jpg" alt="pane 1" class="rotatorPane" data-caption="Lorem Ipsum" data-subcaption="Dolor sit amet" />

</div>

我遇到的问题是......循环中的以下内容:

for(pane in r.panes){
    console.log(pane);
}

输出按预期开始:

0
1
2

但后来我得到了一堆方法名称作为输出:

length
prevObject
context
selector
constructor
init
jquery
size
toArray
get
...etc

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:8)

不要在数组或类似数组的东西上使用for ... in。使用数字索引变量。

for (var i = 0; i < r.panes.length; ++i) {
  var pane = r.panes[i];
  // ...
}

for ... in表单用于迭代对象的属性 - 所有这些。当您想要遍历数组的索引属性时(或者,再次,你是一个数组),总是使用数字索引。

在这种情况下,所讨论的类似数组的对象是一个jQuery对象,除了数字索引属性外,它还具有各种属性。

答案 1 :(得分:1)

你应该在每个循环中使用jQuery,因为你可能无法使用hasOwnProperty,因为jquery将自己的方法和东西添加到对象中