javascript - Mootools 与 jQuery 的奇怪 bug 冲突

标签 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 中您仍会看到一些值。为什么会发生这种情况?我已经无计可施了。

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

最佳答案

MooTools 大量 extends Array.prototype,并且您正在使用 for...in 语句迭代数组。

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

为什么? 因为正如您所注意到的,for...in 语句会爬行原型(prototype)链,也因为迭代的顺序是任意的,迭代数组可能会不按数字顺序访问元素。

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

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

关于javascript - Mootools 与 jQuery 的奇怪 bug 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570572/

相关文章:

mootools - 如何使用 Mootools 通过 id 检查元素的存在

javascript - ajax获取输入类型选择选项的值

javascript - 如何使用jquery将字符串转换为json并更改其值?

jquery - 使 DIV 位于浏览器窗口的右上角。它应该留在那里,即使重新调整窗口大小时也不会移动?

javascript - 如何仅向 ul 列表的一个元素添加样式

javascript - 如何捕获后退按钮事件?

javascript - Mootools 不会为 IE7 中的选择触发 "onChange"事件

javascript - AngularJS - For 循环推送整个对象而不仅仅是标题

javascript - 当服务器关闭/崩溃时,Node JS 自动重启所有永远的 JS 进程

javascript - 我们如何使用 javascript/jQuery 对文本字段进行日期屏蔽?