Jquery.each()和Array.prototype.forEach()方法之间是否有任何区别,因为array.forEach()方法也可用于循环具有length属性的类数组对象。我看到的唯一区别是放置参数,还有什么区别呢?
I found this:
var obj = { one:1, two:2, three:3, four:4, five:5 };
jQuery.each(obj, function(i, val) {
$("#" + i).append(document.createTextNode(" - " + val));
});
我想知道的是,jquery.each()是否为没有length属性的对象调用函数?
答案 0 :(得分:17)
在回调中放置参数。
回调中的参数数量(.forEach()
可让您获得对原始集合的引用。)
回调中的默认this
值。 (在jQuery中它是当前项目,在.forEach()
中它是JavaScript的默认值)
能够在回调中手动设置this
值。 (jQuery不提供此选项,.forEach()
允许您通过第三个参数。)
避免稀疏数组上的非定义属性。 (.forEach()
避免使用它们,jQuery包含它们。)
他们的行为方式非常不同。 jQuery不会尝试遵守或补充标准行为。
答案 1 :(得分:5)
除了Crazy Train的回答:
我想知道的是,jquery.each()是否为没有length属性的对象调用函数?
阅读来源:
// args is for internal usage only
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction( object );
if ( args ) {
...
// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
}
...
}
}
return object;
},
所以你可以看到是否没有length属性,或者它的值是 undefined ,然后jQuery认为它是一个普通的对象,并且会在可枚举的属性上执行for..in循环防范遗产。