Javascript for循环与if条件

Javascript for循环与if条件,javascript,optimization,loops,if-statement,Javascript,Optimization,Loops,If Statement,对于执行一段代码,我有两种选择。代码基本上重置了三个数组中的所有值。其中两个是int数组,一个是布尔数组 选择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; for(i=0;i

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

选择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;
for(i=0;i
选择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;
}

int limit=。首先列出的答案很好地解释了数组在javascript中的实际含义。对于那些感兴趣的人来看看吧

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

for(i=0;i
通常,访问内存中与您最近访问的数据相近的数据会更快

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

一个足够高级的编译器将把第二个版本转换成第一个版本


基准测试:如果不首先对整个程序进行评测,微基准测试将100%无用。因为我不认为性能度量是有用的,所以我不提供它们。

我强烈怀疑这种差异是否会很大。不要把时间浪费在这样的mikro优化上。你应该衡量一下:)@Niko:我正在努力学习如何最好地编程。因此,我们从这样一个小查询开始。迪特里希已经给了我很好的信息+1为了测试我的性能,这里对数组初始化性能进行了全面的讨论:不,这个版本没有使用for循环快,虽然代码更干净,但这是你的选择。但是它会通过调用函数来降低执行速度:)@Champ:你怎么知道它会降低执行速度?也许函数会内联,也许不会。也许具有该函数的版本可以获得更好的分支预测,也许不是。谁知道呢?可能是因为它包含循环,所以编译器可能不会将其视为内联函数。我的2c是,较短的代码只是一个容易阅读/理解的因素。如果从各方面考虑,较长的代码更容易理解/更清晰,那么这可能就是应该使用的代码。我的观点是,任何同时更短、更容易理解的代码显然都是好的,而长代码/简单代码和短代码/不透明代码之间存在争论的空间。
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);
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);