javascript - 为什么 jquery 的 .each() 回调将 indexInArray 而不是 valueOfElement 作为第一个参数?

标签 javascript loops foreach jquery

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

an identical, but unanswered question.each() 的 API 文档也有相当多的赞成票!

我经常发现代码“作用于”值而不是索引,导致函数主体中有一个未使用的变量(这让 js(h|l)int 提示,有充分的理由我的想法)。那么,为什么值不是第一个参数?

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

最佳答案

原因是 foreach 的第一个参数,即值,在 $.each 中不太需要,因为 jQuery 将它提供为 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!');
});

输出是什么?

没有。

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

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

关于javascript - 为什么 jquery 的 .each() 回调将 indexInArray 而不是 valueOfElement 作为第一个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140523/

相关文章:

java - 编译后的程序在第一个 "for"循环处停止

python - 列表中的两个以下元素

c# - 如何知道每个查询是否在循环中成功执行?

javascript - Chrome为什么在音频播放时要求提供图标?

javascript - 检查我的输入框是否被点击或者是 'in focus'纯js

javascript - 使用 JavaScript 的框架

javascript - 是否有任何 jQuery 或 JavaScript 事件可以让我在元素出现在浏览器中之前隐藏它们

python - 迭代计数器 Python3x

php - 在 foreach 中获取更多数据

php - 相当于 mysql 结果的 each(),以模仿 foreach() 的第一个循环