String.prototype.indexOf=function(str){ //返回值 0 -1 X X:子串在父串中的位置。 var len=this.length,len2=str.length-1,tag=0,i=0; if(len2<len){ for(; i<len;i++){ if(this.charAt(i)==str.charAt(tag)){ tag++;} else if(tag!=0){ tag=0;//如果不相等了。则子串 重新开始 比对。位置 从0开始 i--;//如果不相等了。 原串 当前位置之前的所有数据不需要再比较。只要从当前向后比较即可。 } if(tag>len2) break; } } if(len2<0) return 0; else return(tag<len2-1)?-1:i-tag+1;//如果是上面比较完成,从break跳出循环的。那么i-tag+1就是子串在父串的起始位置。 } var a='abcd dcec cdee fg'; alert(a.indexOf('ec'));
这段代码是别人的。
它有两个有趣的地方:
1.标志位的使用 代替我们一般的嵌套循环。节省了大量的资源
2.把返回值的判断 独立出来。并使用标志位来判断和得出具体的位置。 很有新意。
记录一下。