for循环与if条件

for loop versus if condition

本文关键字:条件 if 循环 for      更新时间:2023-09-26

对于执行一段代码,我有两种选择。该代码基本上重置了三个数组中的所有值。其中两个是int数组,一个是boolean数组。

选择1

for (i = 0; i < array1.length; i++)
    array1[i] = 0;
for (i = 0; i < array2.length; i++)
    array2[i] = 0;
for (i = 0; i < array3.length; i++)
    array3[i] = false;

选择2

int limit = <assign the greatest of the array lengths>
for (i = 0; i < limit; i++)
{
    if (i < array1.length)
        array1[i] = 0;
    if (i < array2.length)
        array2[i] = 0;
    if (i < array3.length)
        array3[i] = false;
}

这些中哪一个更快?假定阵列可以具有不同的长度并且彼此之间没有关系。

这里有一个非常好的讨论。首先列出的答案很好地解释了数组在javascript中的实际含义。对于那些感兴趣的人来说,看看吧!

这个版本肯定会更快。也更容易阅读更短,这两个属性都比速度(99%以上的时间)重要得多。

for (i = 0; i < array1.length; i++)
    array1[i] = 0;
for (i = 0; i < array2.length; i++)
    array2[i] = 0;
for (i = 0; i < array3.length; i++)
    array3[i] = false;

通常,访问内存中与您最近访问的数据接近的数据会更快。

这个版本也不会受到第二个版本中的额外分支的影响。

一个足够高级的编译器会将第二个版本转换为第一个版本。

基准测试:如果不首先分析整个程序,微型基准测试是100%无用的。由于我不认为性能度量是有用的,所以我不提供它们。

function reset_array(array, value) {
  var len = array.length;
  array.length = 0;
  while (len--) array.push(value);
}
reset_array(array1, 0);
reset_array(array2, 0);
reset_array(array3, false);