一个奇怪的问题,但每次我使用jQuery.each()时,我想知道为什么indexInArray
是第一个参数而不是第二个参数(第二个当前是值本身),就像本地{{1} }}?
在array.forEach()
的API文档中,an identical, but unanswered question有大量赞成票!
通常,我发现代码“作用于”值而不是索引,导致函数体中的未使用变量(这使得js(h | l)int抱怨,有充分的理由我的看法)。那么,为什么价值不是第一个参数?
这是否是早期版本中经过深思熟虑的实现的宿醉,还是有充分的理由呢?
答案 0 :(得分:6)
原因是foreach
中$.each
的第一个参数,this
中较少需要,因为jQuery将其作为this
提供。
因此,索引似乎更有用。这是一个很好的理由。
我写“出现”,因为这并非没有危险:[1, 2, 3].forEach(function(v) {
if (v===2) console.log('found!');
});
与值为基本类型时的值不完全相同:在这种情况下,值被包装为对象
为什么这很危险?
原因如下:
found!
控制台中的输出:
$.each([1, 2, 3], function() {
if (this===2) console.log('found!');
});
现在使用jQuery:
$.each
输出是什么?
没有
(请注意,我在this related question详细说明了导致此问题的实现。)
今天,随着人们越来越习惯标准的javascript函数,可能会认为拥有其他顺序会更好(这是Underscore.js的选择)。首先提供指数的原因很好,但可能还不够好。但也许这并不重要,因为我们可能不会继续使用foreach
,因为{{1}}通常是可用的(至少对于数组而言)。