• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
邹天得
博客园    首页    新随笔    联系   管理    订阅  订阅

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

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

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

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

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

 

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()性能要好很多。

2、js中的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>

posted on 2017-07-17 09:56  邹天得  阅读(10656)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3