3

一个奇怪的问题,但是每次我使用jQuery.each()时,我都想知道为什么indexInArray是第一个参数而不是第二个参数(第二个当前是值本身),就像 native 一样array.forEach()

一个相同但未回答的问题,在 API 文档上也有相当多的赞成票.each()

通常情况下,我发现代码“作用于”值而不是索引,导致函数体中有一个未使用的变量(这让 js(h|l)int 抱怨,我认为有充分的理由) . 那么,为什么值不是第一个参数呢?

这是早期版本中考虑不周的实现的宿醉,还是有充分的理由?

4

1 回答 1

6

原因是foreachjQuery$.each将其作为this.

因此,该索引似乎更经常有用。这是一个很好的理由。

我写“出现”,因为这并非没有危险:this与原始类型的值不完全相同:在这种情况下,值被包装为对象。

为什么危险?

原因如下:

[1, 2, 3].forEach(function(v) {
    if (v===2) console.log('found!');
});

控制台中的输出:

found!

现在使用 jQuery:

$.each([1, 2, 3], function() {
    if (this===2) console.log('found!');
});

输出是什么?

没有。

(请注意,我在此相关问题中详细介绍了导致此问题的实现。)

今天,随着人们越来越习惯于标准的 javascript 函数,可能会认为使用其他顺序会更好(这是Underscore.js的选择)。首先提供索引的原因是好的,但可能还不够好。但也许这并不重要,因为我们可能不会继续使用$.each现在foreach普遍可用的(至少对于数组)。

于 2013-01-03T14:11:09.957 回答