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