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

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

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

View Code
 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()还可以继续优化

View Code
 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;
}

 

 注:以上均为小弟拙见。欢迎大家批评指正,大家共同学习,一起进步!

作者: loveok_56 发表于 2011-08-23 10:58 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"