Mootools奇怪的bug与jQuery冲突

时间:2009-10-15 06:14:08

标签: javascript jquery mootools

尝试运行以下代码:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script> b = jQuery.noConflict(true); </script>

<script src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.3/mootools-yui-compressed.js"></script>
<script>
  (function($){  
    $.a = function(){
      var x = [];
      for (l in x){
        console.log(l);
      }
    };
  })(b);

  b.a();
</script>

即使x为空,在console.log中您也会看到一些值。为什么会这样?我的智慧结束了。

有人可以建议如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

MooTools 严重 extends Array.prototype,您正在使用for...in语句迭代数组。

此语句用于迭代对象属性,对于Arrays,建议使用传统的forwhile循环。

为什么?因为for...in语句会抓住你注意到的原型链,也因为迭代的顺序是任意的,迭代数组可能无法访问数字中的元素顺序。

但是如果您仍想使用此语句进行迭代,则可以在循环内部进行检查,以确保您将迭代的属性直接存在于对象上,而不是原型链上的某个位置,使用{ {3}}功能:

var x = [];
for (l in x){
  if (x.hasOwnProperty(l)) {
    console.log(l);
  }
}