首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

数组foreach的有关问题

2013-04-20 
数组foreach的问题下面是underscore源码对foreach的扩展:var each _.each _.forEach function(obj,

数组foreach的问题
下面是underscore源码对foreach的扩展:


  var each = _.each = _.forEach = function(obj, iterator, context) {
    if (obj == null) return;
//如果原生Array支持的话
    if (nativeForEach && obj.forEach === nativeForEach) {
      obj.forEach(iterator, context);
    } else if (obj.length === +obj.length) {
      for (var i = 0, l = obj.length; i < l; i++) {
        if (iterator.call(context, obj[i], i, obj) === breaker) return;
      }
    } else {
      for (var key in obj) {
        if (_.has(obj, key)) {
          if (iterator.call(context, obj[key], key, obj) === breaker) return;
        }
      }
    }
  };

有两个问题:
1.context参数起什么左右?
2.obj.length === +obj.length是什么意思? JavaScript
[解决办法]
1.就是将iterator方法劫持给context,等于context也有了iterator方法,如果iterator方法里有this,就是指向context,就是常说的上下文。

2.+obj.length是将字符串转成数字等同于0+obj.length,foreach也可能是一个有length属性的对象,比如{a:1,b:1,length:'2'},这时候obj.length是'2',不是2,一个是字符串一个是数字,所以obj.length === +obj.length为false,则执行最后的else里面的代码,否则为正常数组的话obj.length为2,+obj.length也是2,obj.length === +obj.length为true,则数组遍历。

热点排行