js 中for循环和indexOf()性能对比


1js for循环和indexOf()性能对比

js中提供了indexOf()函数以获取某个字符在字符串中的index,可以通过它也判断某个字符或字符串是否存在。

但同时在jsfor循环也可以实现同样的效果(判断字符是否存在)。那么到底用哪个才好呢?

于是写了两个函数来比较:

 

function getValue() {

  var str = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"

  var specialWord = new Array("'", "\\", "<", ">", "%", "?", "/", "+", "@", "&", "#", "$", "……", "^", "~", "!", "", "", "", ""); //可以继续添加特殊字符 此 /  字符也不可输入 输出时会破坏JSON格式

  for (var specialWordItem = 0; specialWordItem < specialWord.length; specialWordItem++) {

     ar specialIndex = str.indexOf(specialWord[specialWordItem]);

     if (specialIndex != (-1)) {

       return false;

     }

   }

   return true;

}

 

function getReValue() {

  var str = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"

  var specialWord = new Array("'", "\\", "<", ">", "%", "?", "/", "+", "@", "&", "#", "$", "……", "^", "~", "!", "", "", "", ""); //可以继续添加特殊字符 此 /  字符也不可输入 输出时会破坏JSON格式

  for (var specialWordItem = 0; specialWordItem < specialWord.length; specialWordItem++) {

    for (var j = 0; j < str.length; j++) {

      if (specialWord[specialWordItem] == str.charAt(j)) {

        return false;

      }

    }

  }

  return true;

}

 

unction bothFunction() {

    getValue();

    getReValue();

}         

 

str字符串是1000个字符。判断str中是否存在specialWord中的特殊字符。性能测试结果如下图所示:

 

现在可以很明显地看到用indexOf()性能要好很多。

2js中的for循环写法的效率对比

一共三种写法 如下:

for (var i = 0; i < arr.length; i++) 

for (var i in arr)

for (var i = 0, len = arr.length; i < len; i++)

 

先看下运行测试的界面:

 

再看下对应的三个结果,三种写法执行的效率是有很大不同的:

 

如此看来,执行效率最快的是第三种:

for (var i = 0, len = arr.length; i < len; i++)

先声明变量,再进行循环判断,效率远比遍历数组高得多,也比循环取得数组长度的效率快得多!

下面是页面源代码:

<html>

<body>

<script type="text/网页特效">  

function makeArr(num) {

    var arr = [];

    for (var i = 0; i<num; i++){

        arr.push('abc');

    }

    arr.join('');

    return arr;

}

var num = 10000000;

function function1() {

    var arr = makeArr(num);

    var start = (new Date()).valueOf();

    var count = 0;

    for (var i = 0; i < arr.length; i++) {

        count++;

    }

    var end = (new Date()).valueOf();

    console.log('Count: '+count+' times');

    console.log('Time spent: '+(end - start));

}

function function2() {

    var arr = makeArr(num);

    var start = (new Date()).valueOf();

    var count = 0;

    for (var i in arr) {

        count++;

    }

    var end = (new Date()).valueOf();

    console.log('Count: '+count+' times');

    console.log('Time spent: '+(end - start));

}

function function3() {

    var arr = makeArr(num);

    var start = (new Date()).valueOf();

    var count = 0;

    for (var i = 0, len = arr.length; i < len; i++) {

        count++;

    }

    var end = (new Date()).valueOf();

    console.log('Count: '+count+' times');

    console.log('Time spent: '+(end - start));

}    

</script>

  

for (var i = 0; i < arr.length; i++) <br />

<button onClick="function1();">loop 1</button><br />

<p id="f1"></p>  

for (var i in arr)<br />

<button onClick="function2();">loop 2</button><br />

<p id="f2"></p>  

for (var i = 0, len = arr.length; i < len; i++)<br />

<button onClick="function3();">loop 3</button><br />

<p id="f3"></p>

  

</body>

</html>


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM