let str = 'abcdeee';//无l
let a = 1;
if(a == 2){
console.log('one');
}else if(str.indexOf('l')){
console.log('two');
}else if(a == 1){
console.log('three');
}
//结果为two
在上边的例子中即便是indexOf(‘l’)本身在str里不存在也会返回true,这里涉及到两点,一是if,在js中,数字0为false,而非0的数字会被当做true。二是indexOf的返回值的问题,indexOf如果存在会返回字符第一次出现的位置0,1,2,3…,而indexOf如果不存在会返回-1,非0。
所以这两者相结合就会出现一些意外的结果,理论上indexOf查找不存在,if应该判断为false从而进入下一个if分支,结果因为indexOf返回的是-1会被if判定为true导致错误。也就是说无论indexOf是否能查找到都会返回true,除了第一个字符,indexOf会返回0从而被if判断为false。
let str = 'abcdeee';
let a = 1;
if(a == 2){
console.log('one');
//z不存在indexOf返回-1,而if语句非0为true
}else if(str.indexOf('z')){
console.log('two');
}else if(a == 1){
console.log('three');
}
//结果为two
let str = 'abcdeee';
let a = 1;
if(a == 2){
console.log('one');
//因为a存在并且它是字符串第一个字符,indexOf返回0,而if语句0为false
}else if(str.indexOf('a')){
console.log('two');
}else if(a == 1){
console.log('three');
}
//结果为three
找到问题所在解决就好办了,给indexOf做一些判断就好了
str.indexOf(‘字符串’) !== -1只要不是-1就ok了
<script>
let str = 'abcdeee';
let a = 1;
if(str.indexOf('a') !== -1){
console.log(str);
}else{
console.log('no no no');
}
</script>
这样就大功告成了