js中if判断indexOf可能导致的问题

	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>

这样就大功告成了

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值