【问题标题】:Difference in Jquery.each() and Array.prototype.forEach() method [duplicate]Jquery.each() 和 Array.prototype.forEach() 方法的区别[重复]
【发布时间】:2013-07-03 14:43:22
【问题描述】:

Jquery.each() 和 Array.prototype.forEach() 方法之间有什么区别吗,因为 array.forEach() 方法也可以用于循环具有长度属性的类数组对象。我看到的唯一区别是论点的位置,它们还有什么区别?

 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() 是否为没有长度属性的对象调用函数??

【问题讨论】:

标签: javascript jquery


【解决方案1】:
  • 在回调中放置参数。

  • 回调中的参数数量(.forEach() 提供对原始集合的引用。)

  • 回调中的默认 this 值。 (在 jQuery 中是当前项,在 .forEach() 中是 JavaScript 默认值)

  • 能够在回调中手动设置this 值。 (jQuery 没有提供这个选项,.forEach() 允许您通过第三个参数。)

  • 避免稀疏数组上的未定义属性。 (.forEach() 避免了它们,jQuery 包含它们。)


它们是非常不同的行为方法。 jQuery 不会尝试符合或补充标准行为。

【讨论】:

  • 我想知道的是,jquery.each() 是否为没有长度属性的对象调用函数??
【解决方案2】:

除了疯狂火车的回答:

我想知道的是,jquery.each() 是否为没有长度属性的对象调用函数??

阅读原文:

// 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循环防止继承属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2016-08-15
    • 2014-10-05
    • 2013-01-21
    相关资源
    最近更新 更多