gpt4 book ai didi

javascript - 各种迭代器性能差异的原因

转载 作者:行者123 更新时间:2023-12-03 12:45:42 25 4
gpt4 key购买 nike

在使用 JavaScript 的新数组函数时,我在以下代码中发现了一些主要的性能差异:jsfiddle: http://jsfiddle.net/jKUm5/

最慢​​ for var i in array (67.2 毫秒):

for (var a=0;a<amount;a++) {
for (var b in arr) {
arr[b]++;
}
}

JS 5.1 array.forEach (2.1 毫秒):

for (var c=0;c<amount;c++) {
arr.forEach(function(e,i,a) {
arr[i]++;
});
}

最快(默认)for var i=0;i<array.length;i++ (1.1 毫秒):

for (var d=0;d<amount;d++) {
for (var e=0;e<arr.length;e++) {
arr[e]++;
}
}

我认为使用 for var i in array 是一个很好的做法而不是默认的,不过好像默认是最快的!

我的主要问题是:

  • for var i in array表现不佳的原因是什么? ?
  • 默认迭代器和新迭代器之间有什么区别(为什么需要另一种迭代器方法)?

最佳答案

for-in 循环会迭代对象上的所有属性,而不仅仅是数组值。因此,它必须从对象中检索这些属性值,而不是像其他两种方法那样仅仅创建数组索引。除了迭代数组的方法是错误的之外,它的速度较慢并不令我感到惊讶。但无论速度如何,迭代数组的方法都是错误的。如果有人向 Array 原型(prototype)添加可迭代方法或属性,该属性将显示在您的 for-in 数组迭代中。

.forEach() 的存在是为了方便,有时回调创建的闭包很方便(特别是当您想在异步回调中访问数组索引时)。它可能会更慢,因为它涉及每次迭代的带参数的函数调用,而第三种方法在每次迭代时没有额外的函数调用。

仅供引用,.forEach() 方法是 Firefox 中三个方法中最慢的,因此这也因浏览器而异。

关于javascript - 各种迭代器性能差异的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23352682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com