str.indexOf(searchValue [, fromIndex])
第一个参数:没有传入,强制设置为 "undefined"
第二个参数:
fromIndex 的值小于0,置为0;
fromIndex的值大于或等于str.length,那么结果会直接返回-1
返回值:
查找空字符串,
index小于等于数组长度,返回index
index大于等于数组长度,返回数组长度
String.prototype.indexof=function(value,index=0){
//没有传入value,强制转换
if(value==null){
value="undefined"
}
//小于0
if(index<0){
index=0
}
//value为空
if (value == '') {
return index >= this.length ? this.length : index;
}
//大于等于长度
if(index>=this.length){
return -1
}
var k = index;
var l = 0;
while (k < this.length) {
//对比起始位置是否相同
if (this.charAt(k) == value.charAt(l)) {
var i = l++;
var j = k++;
//起始位置相同,则比较之后的字符串
while (i < value.length) {
//如果不等,
if (this.charAt(j) != value.charAt(i)) {
l = 0;
break;
}
i++;
j++;
}
if (i == value.length) {
//对比全部,返回起始下标
return k-1;
}
}
k++;
}
return -1;
}
let str='zxcvbnm'
console.log(str.indexof('',4))//4
console.log(str.indexof('',10))//7
console.log(str.indexof('z',23)) //-1
console.log(str.indexof('z',-4)) //0
console.log(str.indexof()) //-1