Javascript 我应该什么时候使用forEach?
我可以Javascript 我应该什么时候使用forEach?,javascript,for-loop,foreach,Javascript,For Loop,Foreach,我可以 var arr = []; arr.forEach(function(i) { i; }); for (var i = 0, length = arr.length; i < length; ++i) { arr[i]; } var arr=[]; arr.forEach(功能(i){ 我 }); 对于(变量i=0,长度=arr.length;i
var arr = [];
arr.forEach(function(i) {
i;
});
for (var i = 0, length = arr.length; i < length; ++i) {
arr[i];
}
var arr=[];
arr.forEach(功能(i){
我
});
对于(变量i=0,长度=arr.length;i
什么时候我应该使用一个而不是另一个,性能有差异吗?您可以在任何时候使用foreach:
- 数组是关联的或有间隙,即不能通过递增的数字(1,2,5,'x',-7)到达每个元素
- 您需要按照它们在数组中出现的顺序进行迭代。(例如2,1,3)
- 你要确保不要陷入无休止的循环
- 您需要一种简单的方法来调整正在移动的阵列
- 您需要特定的序列,例如($i=100;$i<1000;$i+=5)导致100105110
forEach
速度较慢,但它会为每次迭代创建一个范围,您必须手动为创建一个正常的(如果需要)…并允许您在回调中设置this
的值(及其第二个参数)。并非所有浏览器都支持它:forEach
也不会在空项上循环。阅读更多信息:-它包括一个适用于不支持它的浏览器的polyfill。这部分回答了您的问题:要回答性能问题,请在阵列中使用50000个值创建一个性能测试。或者执行50000个循环。forEach
是ECMAScript 5->compatibility@Tim我看到一个代码段有实时输出,而另一个没有——这可能会改变迭代所需的时间。你知道——它们是谎言,该死的谎言,还有基准我已经建立了一个游戏引擎,并且正在努力提高每一点速度。我想将它们改为for循环是一件好事,因为它更快,使我的引擎更兼容,对吗?@user2251919如果您的数组是无间隙编号的,并且您知道如何避免意外的无止境循环,是的。无论如何,不要高估差异。:)好的,谢谢,我会记住这一点,我想我现在就不谈了,但要知道这仍然是件好事:)“你的数组是关联的”:你不应该对数组使用非数值属性。它们不会被视为数组元素,即使是forEach
。也不考虑负指数。“foreach在副本上工作”:这是不正确的(或者至少是一个实现细节)。只有元素的范围是固定的。如果在对数组进行迭代之前修改该数组的值,则回调将获取新值。看见你从哪里得到它在副本上工作的信息?“你需要以与它们在数组中出现的顺序完全相同的顺序进行迭代”你也可以使用for
循环。总的来说,我认为你的回答包含了一些不准确的信息,特别是关于复制的事情。规范非常清楚如何处理修改。