有没有理由说jQuery.each在可用时不依赖于Array.forEach?

时间:2013-02-22 04:41:40

标签: javascript jquery underscore.js ecmascript-5

在深入研究下划线库的源代码时,我发现_.each只要有可用就依赖于ECMAScript 5 API Array.forEach

var each = _.each = _.forEach = function(obj, iterator, context) {
    if (obj == null) return;
    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;
                }
            }
        }
    }
};

我注意到jQuery.each(静态的,而不是jQuery包装器的.each方法)只执行调用回调函数的传统for,无论{{1}是否可用。有没有理由我错过了?

1 个答案:

答案 0 :(得分:1)

这可能是因为两者在实现上有所不同 - Array.forEach将数组元素作为第一个参数传递,将索引作为第二个参数传递。 jQuery.each首先传递索引,数组元素发送。

实际上,关于堆栈溢出的最佳讨论源可能就在这里:

jQuery.each implementation differs from native Array.forEach

他们的猜测是这是一个错误 - 很多网站已经实现了jQuery.each,期望索引优先,他们无法切换它们。