尝试运行以下代码:
<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
中您也会看到一些值。为什么会这样?我的智慧结束了。
有人可以建议如何解决这个问题。
答案 0 :(得分:3)
MooTools 严重 extends Array.prototype
,您正在使用for...in
语句迭代数组。
此语句用于迭代对象属性,对于Arrays,建议使用传统的for
或while
循环。
为什么?因为for...in
语句会抓住你注意到的原型链,也因为迭代的顺序是任意的,迭代数组可能无法访问数字中的元素顺序。
但是如果您仍想使用此语句进行迭代,则可以在循环内部进行检查,以确保您将迭代的属性直接存在于对象上,而不是原型链上的某个位置,使用{ {3}}功能:
var x = [];
for (l in x){
if (x.hasOwnProperty(l)) {
console.log(l);
}
}