Jquery.each()和Array.prototype.forEach()方法的区别

时间:2013-07-05 13:16:58

标签: javascript jquery

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属性的对象调用函数?

2 个答案:

答案 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循环防范遗产。

相关问题