for loop与if条件

The*_*let 2 javascript optimization loops if-statement

我有两种替代方法来执行一段代码.代码基本上重置了三个数组中的所有值.其中两个是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;
Run Code Online (Sandbox Code Playgroud)

选择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;
}
Run Code Online (Sandbox Code Playgroud)

哪一个会更快?鉴于阵列可以具有不同的长度并且彼此没有关系.

有一个真正的好讨论在这里.首先列出的答案很清楚地解释了数组在javascript中实际意味着什么.对于有兴趣的人来看看吧!

Die*_*Epp 6

这个版本几乎肯定会更快.它也更容易阅读更短,这两个都是比速度更重要的属性(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;
Run Code Online (Sandbox Code Playgroud)

通常,访问内存中最近访问的数据的速度更快.

此版本也不会受到您在第二个版本中获得的额外分支的影响.

一个足够先进的编译器会将第二个版本转换为第一个版本.

基准测试:微基准测试100%无用,无需首先分析整个程序.由于我不认为性能测量是有用的,我不提供它们.