0

当我试图将一个使用 jQuery 的谷歌分析插件压缩到我的网站中时,这种情况就出现了,该网站自始至终都使用 mootools。

jQuery 代码使用类似于代码中的循环,没有问题。

http://jsfiddle.net/RzBh5/2/

var myData = [[20130105,0,0],[20130106,0,0],[20130107,0,0],[20130108,3,44],[20130109,2,6],[20130110,0,0]]
for (var r in myData) {
$('results').set('html',$('results').get('html') + '<br>' + myData[r][0] + ' - ' + r);
}

Mootools 中的相同循环将它添加到数组类的所有新方法添加到我构建的数组中。有人可以解释发生了什么,以及我如何用普通的 javascript 或 jQuery 重写这个循环,这样它就不会发生。

执行此循环的“mootools”方法可以正常工作是;

Array.each(myData, function(stuff, index){
$('resultsMoo').set('html',$('resultsMoo').get('html') + '<br>' + stuff[0]);
});

小提琴只是吐出数组对象的内容。

谢谢

4

1 回答 1

4

普通for ... in循环列出了对象的所有方法和属性,包括通过原型继承的方法和属性。

要将循环限制为相应对象独有的那些属性和方法,您可以使用hasOwnProperty().

但是,在这种情况下,它只是一个要循环的数组,您应该使用这样的普通for循环:

for( var i=0; i<myData.length; i++ ) {
   $('results').set('html',$('results').get('html') + '<br>' + myData[i][0] + ' - ' + i );
}

编辑

数组的核心是一个对象,就像任何其他对象一样。在 JavaScript 中有一个名为 的本机对象Array,所有数组都从该对象继承其函数。

因此,当您使用循环时,会列出for ... in父对象的所有方法以及数组本身的新属性(如值)。Array

希望这个解释有点帮助。

于 2013-01-22T13:25:41.963 回答