1、短路操作JavaScript逻辑或||短路运算有时可以用来代替一些简单的ifelse·逻辑或||短路操作:如果左边能转为真,则返回左边的值,否则返回右边的值。例如:letcif(a){c=a}else{c=b}这里可以用逻辑或者来代替letc=a||b2、三元运算符使用三元运算符来提高代码的可读性,一般情况下建议只使用一层,太多层会影响代码的可读性。例如:constfn=nBoolean=>{if(nBoolean){return1}else{return0}}//替换为三元运算符constfn=nBoolean=>{returnnBoolean?1:0}条件赋值、递归等也可以使用三元运算符//nBoolean为真时num值为10,否则为5letnum=nBoolean?10:5//求0-n之间的整数之和letsum=0functionadd(n){sum+=nreturnn>=2?add(n-1):result}letnum=add(10)3.switchcaseswitchcase比elseif可读性更高,但是写起来比较麻烦。例如:有a,b,c,d四种类型,a和b输出1,c输出2,d输出3,默认输出0lettype='a'//使用ifelseif(type=='a'||type=='b'){console.log(1)}elseif(type=='c'){console.log(2)}elseif(type=='d'){console.log(3)}else{console.log(0)}//使用switchcase写switch(type){case'a':case'b':console.log(1)breakcase'c':console.log(2)breakcase'd':console.log(3)breakdefault:console.log(0)}4.对象配置/策略模式参数使用不同的数据/算法/函数。策略模式就是把一系列的算法封装起来,让它们可以替换。封装的算法是独立的,其特性不能被外部改变。例如:lettype='a'lettactics={'a':1,'b':1,'c':2,'d':3,default:0}console.log(tactics[type])//1用例子来体现对象配置/策略模型:案例一:商城的促销价格根据不同的用户使用不同的折扣,比如:普通用户不打折,普通会员打折10%,15年费会员%折扣,超级会员20%折扣使用ifelse实现://获得折扣---使用ifelseconstgetDiscount=userKey=>{if(userKey=='regularmember'){return0.9}elseif(userKey=='年度会员'){return0.85}elseif(userKey=='超级会员'){return0.8}else{return1}}console.log(getDiscount('普通会员'))//0.9using对象配置/策略模式实现//获取折扣--使用对象配置/策略模式constgetDiscount=userKey=>{//根据用户类型生成折扣对象letdiscounts={'普通会员':0.9,'年会员':0.85,'超级会员':0.8,'默认':1,}returndiscounts[userKey]||discounts['default']}console.log(getDiscount('ordinarymember'))//0.9情况2:年终奖假设绩效为A的人年终奖是工资的4倍,则性能是B的3倍,性能是C的2倍。实现逻辑代码如下:constgetBonus=(leval,salary)=>{if(leval=='A'){returnsalary*4}if(leval=='B'){returnsalary*3}if(leval=='C'){returnsalary*2}}getBonus('B',20000)//60000上面的代码很简单,但是里面可能有很多ifelse,如果加入新的特性,或者settingsarechanged一旦设置了倍数,就需要把代码从头到尾看完,才能修改。如果使用对象配置/策略模式来简化这个功能。这将使代码更容易修改。让strategies=newMap([['A',4],['B',3],['C',2]])constgetBonus=(leval,salary)=>{returnstrategies.get(leval)*salary}getBonus('B',20000)//60000如果此时需求是加条件的话,年终奖会按照部门来考核。比如公司有D和F两个部门,D部门业绩比较好,所以年终奖翻1.2倍,F部门业绩稍差,年终奖10%离开。此时在objectconfiguration/strategy模式下重构代码,拼接state值,然后存入Mapletstrategies=newMap([['A_D',4*1.2],['B_D',3*1.2],['C_D',2*1.2],['A_F',4*0.9],['B_F',3*0.9],['C_F',2*0.9]])constgetBonus=(leval,salary,department)=>{returnstrategies.get(`${leval}_${department}`)*salary}getBonus('A',20000,'F')//720000以上,小技巧而已。希望能帮助到更多的人。
