js 中for循环和indexOf()性能对比
在js中提供了indexOf()函数以获取某个字符在字符串中的index,可以通过它也判断某个字符或字符串是否存在。
但同时在js中for循环也可以实现同样的效果(判断字符是否存在)。那么到底用哪个才好呢?
于是写了两个函数来比较:

1 <script type="text/javascript">
2 function getValue() {
3
4 var str = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"
5 var specialWord = new Array("'", "\\", "<", ">", "%", "?", "/", "+", "@", "&", "#", "$", "……", "^", "~", "!", "‘", "’", "!", "¥"); //可以继续添加特殊字符 此 / 字符也不可输入 输出时会破坏JSON格式
6 for (var specialWordItem = 0; specialWordItem < specialWord.length; specialWordItem++) {
7 var specialIndex = str.indexOf(specialWord[specialWordItem]);
8 if (specialIndex != (-1)) {
9 return false;
10 }
11 }
12 return true;
13 }
14
15 function getReValue() {
16
17 var str = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij"
18 var specialWord = new Array("'", "\\", "<", ">", "%", "?", "/", "+", "@", "&", "#", "$", "……", "^", "~", "!", "‘", "’", "!", "¥"); //可以继续添加特殊字符 此 / 字符也不可输入 输出时会破坏JSON格式
19 for (var specialWordItem = 0; specialWordItem < specialWord.length; specialWordItem++) {
20 for (var j = 0; j < str.length; j++) {
21 if (specialWord[specialWordItem] == str.charAt(j)) {
22 return false;
23 }
24 }
25 }
26 return true;
27 }
28
29 function bothFunction() {
30 getValue();
31 getReValue();
32 }
33
34 </script>
str字符串是1000个字符。判断str中是否存在specialWord中的特殊字符。性能测试结果如下图所示:
现在可以很明显地看到用indexOf()性能要好很多。
当然getValue()还可以继续优化

function getValue(str, specialWord) {
if ((typeof str == "string") && (specialWord instanceof Array)) {
var specialIndex = -1,
specialWordLength = specialWord.length;
for (var specialWordItem = specialWordLength - 1; specialWordItem >= 0; specialWordItem--) {
specialIndex = str.indexOf(specialWord[specialWordItem]);
if (specialIndex > -1) {
return false;
}
}
}
return true;
}
注:以上均为小弟拙见。欢迎大家批评指正,大家共同学习,一起进步!
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架