背景这两天在做CodeReview的时候,发现了很多if-else/switch的语句,不是特别优雅。在一些逻辑复杂的地方,显得臃肿,不那么好读。例如:constgetFaviconIcon=()=>{constcountry=process.env.cid||'ID';开关(国家){case'id':{return'/public/favicon.ico';}case'vn':{return'/public/favicon.ico';}默认值:{return'/public/favicon.ico';}}};最近刚看到一篇关于这个话题的文章,有兴趣的可以看看:https://betterprogramming.pub...下面摘录部分示例代码,特此声明。好的,让我们进入正题。例如:functiongetTranslation(rhyme){constlowercasedRhyme=rhyme.toLowerCase();if(lowercasedRhyme==="applesandpears"){return"楼梯";}elseif(lowercasedRhyme==="hampsteadheath"){return"Teeth";}elseif(lowercasedRhyme==="loafofbread"){return"Head";}elseif(lowercasedRhyme==="porkpies"){return"Lies";}elseif(lowercasedRhyme==="口哨和长笛"){return"Suit";}return"Rhymenotfound";}这个看起来很臃肿,做了太多的lowercasedRhyme==='xxx'判断,以后还会有新的,每个分支都需要判断一次。如果替换为switch语句:functiongetTranslation(rhyme){switch(rhyme.toLowerCase()){case"applesandpears":return"Stairs";案例“汉普斯特德荒地”:返回“牙齿”;案例“面包”:返回“头”;case"porkpies":返回"Lies";case"口哨和笛子":return"Suit";default:return"韵未找到";我们只需要返回一个值。遇到比较复杂的函数也容易漏掉break语句,导致错误。另一种方式:functiongetTranslationMap(rhyme){constrhymes={"applesandpears":"Stairs","hampsteadheath":"Teeth","loafofbread":"Head","porkpies":"Lies","口哨与笛子":"套装",};返回押韵[rhyme.toLowerCase()]??“没找到韵”;}我们直接使用key-value形式访问数据,最后使用??底线。这??这是所谓的空合并运算符:constfoo=null??'默认字符串';console.log(foo);//预期输出:“默认字符串”constbaz=0??42;控制台。log(baz);//expectedoutput:0不熟悉的朋友,可以去文档:https://developer.mozilla.org...如果遇到比较复杂的逻辑,也可以在合适的场景下做这样,例如:functioncalculate(num1,num2,action){constactions={add:(a,b)=>a+b,subtract:(a,b)=>a-b,multiply:(a,b)=>a*b,除:(a,b)=>a/b,};返回动作[动作]?.(num1,num2)??"Calculationisnotrecognized";}有点注意,这里我们同时使用了?。和??运营商。结束语今天讨论的问题其实是比较主观的,有一定的个人喜好。代码的可读性和可维护性应该是我们都需要注意的。今天的内容就这些了,希望对大家有所帮助。
