Ben*_*anc 3 javascript foreach jquery loops
一个奇怪的问题,但每次我使用jQuery.each()时我都想知道为什么它indexInArray是第一个参数而不是第二个参数(第二个当前是值本身),就像本机一样array.forEach()?
有一个相同的,但没有答案的问题,API文档.each()也有相当多的赞成!
通常情况下,我发现代码"作用于"值而不是索引,导致函数体中的未使用变量(这使得js(h | l)int抱怨,我认为有充分的理由) .那么,为什么价值不是第一个参数呢?
这是否是早期版本中经过深思熟虑的实现的宿醉,还是有充分的理由呢?
原因是,jQuery提供的第一个参数foreach值不太需要.$.eachthis
因此,该指数似乎更有用.这是一个很好的理由.
我写"出现",因为这并非没有危险:this与值为基本类型时的值不完全相同:在这种情况下,值被包装为对象.
为什么危险?
原因如下:
[1, 2, 3].forEach(function(v) {
if (v===2) console.log('found!');
});
Run Code Online (Sandbox Code Playgroud)
控制台中的输出:
found!
Run Code Online (Sandbox Code Playgroud)
现在使用jQuery:
$.each([1, 2, 3], function() {
if (this===2) console.log('found!');
});
Run Code Online (Sandbox Code Playgroud)
什么输出?
没有.
今天,随着人们越来越习惯标准的javascript函数,可能会认为拥有其他顺序会更好(这是Underscore.js的选择).首先提供指数的原因很好,但可能还不够好.但也许这并不重要,因为我们可能不会继续使用$.each现在foreach一般可(至少对于阵列).