我有以下对象:JavaScript的for ... in循环是有奇怪的结果
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>
我遇到的问题是与以下用于... in循环:
for(pane in r.panes){
console.log(pane);
}
输出按预期开始:
0
1
2
但后来我得到了一堆的方法名称为输出:
length
prevObject
context
selector
constructor
init
jquery
size
toArray
get
...etc
有谁知道为什么发生这种情况?
'为in'只能检索所有的键时使用一个东西。对于其原型尚未修改的简单数组,除了迭代顺序不能保证(特别是如果将项插入数组中间),大多数情况下都可以工作,所以您应该永远不要使用它。 – 2012-04-04 19:11:08
嗯,是的,但是我个人试图回避那些“总是有效”的编码实践,当有一个简单的替代方法* always *时。此外,对于某些代码,您永远不知道其环境可能会发生何种变化,以便Array原型获得一些额外的可迭代属性。是的,有'hasOwnProperty()'测试,但如果你不得不去处理所有的麻烦,那看起来没有意义。 – Pointy 2012-04-04 19:14:14
如果你阅读我的评论,你会发现我的观点是即使有一种方法可行,但你仍然不应该使用它。 – 2012-04-04 19:20:40