巧用短路逻辑优化代码质量

1、我们首先来看一种数组去重的写法:

var arr=["a","b","a","c","a","b"];
function unique1(arr){   
    for(var i =0,uarr=[];i<arr.length;i++){
        for(var k =0;k<uarr.length;k++){
                if(arr[i] == uarr[k]){
                    break;
                }       
        }
        uarr[k]=arr[i];
    }
    return uarr;
}
console.log( unique1(arr) );

2、问自己一句:你觉得方法有问题吗?你可以优化吗?

3、稍有经验的人立马就会发现问题所在,但是对于当时还是新手的我来说,真的发现不了,而且别人给我讲了好几遍,才让我恍然大悟。其实问题就出在这句:

uarr[k]=arr[i];

因为如果arr[i]已经在uarr中有了,那么k一定小于uarr.length,uarr[k]=arr[i]代表覆盖,即会重新赋值一次,虽然最后的结果是一样的,但这样的代码质量不高。

4、很多人这个时候就会想到:那就在前面加一句条件判断:

if(k==uarr.length) {
    (uarr[k]=arr[i]);
}

工作中碰到的很多同事遇到类似的问题都是这样处理的,这本身并没有错,但其实我们还有一种更简单的方法——利用短路逻辑:
“&&” 如果前面为假,就不再执行后面的语句。
“||”如果前面为真,就不再执行后面的语句。
所以上面的那一段就可以直接写成:

    k==uarr.length && (uarr[k]=arr[i]);

5、可是很多人并不理解和接受这种直接明了的写法,那不如我们再举一例:

    if( response.status.conditions.length != 0 ){……}    

这样的写法是很多初入职场的人会写出来的逻辑判断,可是在运行中是会出问题的。如果response.status为undifined/none,那么response.status.conditions就会报错,于是有些人就会这么处理:

 if (response) {
     if (response.status) {
         if (response.status.conditions.length ) {
             ……
         }
     }
 }

其实可以简写成:

if(response && response.status && response.status.conditions.length){
    ……
}

所以,我们在平时写代码时,巧用短路逻辑,可以优化代码质量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值