在这篇文章中,我将与您分享一些关于JS的技巧,这些技巧可以提高您的JS技能。作者:CodeOz译者:前端小智来源:dev有梦想,有干货,微信搜索【大千世界】关注这位凌晨还在洗碗的洗碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。我们正在招聘,年薪:25万-60万+奖金,有意者请点我了解详情。1.if避免太长如果判断值满足多个条件,我们可以这样写:if(value==='a'||value==='b'||value==='c'){...}如果有多个这样的条件,if条件会很尴尬,可读性会降低。我们可以这样简化它:if(['a','b','c'].includes(value)){...}2.双倍!运算符将任何变量转换为布尔值!(NOT)运算符可以使用两次!!,这样任何变量都可以转换为布尔值(如布尔函数),当你需要处理之前检查一个值时非常方便。consttoto=null!!toto//falseBoolean(toto)//falseif(!!toto){}//toto不为null或undefined3.可选(?)在JS中,我们需要经常检查对象的一些属性是否存在,然后才可以处理,否则会报错。早期我们可能会这样做:consttoto={a:{b:{c:5}}}if(!!toto.a&&!!toto.a.b&&!!toto.a.b.c){...}//toto.a.b.cexist如果对象嵌套很深,我们的写法是很难读懂的。这时候,我们可以使用吗?简化:if(!!toto.a?.b?.c){...}//toto.a.b.cexist//如果键不存在,返回`undefined`。consttest=toto.a?.b?.c?.d//undefined4.if里面if有返回值,不要写else经常看到这种写法:if(...){return'toto'}else{return'tutu'}如果if有返回值,可以这样写:if(...){return'toto'}return'tutu'5.避免使用forEach,使用filter,map,reduce,every,一些作为初学者,我们使用了很多forEach函数,但是JS给了我们很多选择,而这些函数就是FP(函数式编程)。filterfilter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。consttoto=[1,2,3,4]//过滤奇数constevenValue=toto.filter(currentValue=>{returncurrentValue%2==0})//[2,4]mapmap()方法创建一个new一个数组,其结果是数组中的每个元素都是一次调用所提供函数的返回值。consttoto=[1,2,3,4]constvalueMultiplied=toto.map(currentValue=>{returncurrentValue*2})//[2,4,6,8]reducereduce()方法为每个Element执行一个reducer您提供的函数(按升序排列),将其结果聚合成一个单一的返回值。consttoto=[1,2,3,4]constsum=toto.reduce((accumulator,currentValue)=>{returnaccumulator+=currentValue},0)//10Some&Everysome()方法测试是否至少有1个元件通过了提供的功能测试。它返回一个布尔类型的值。every()方法测试数组中的所有元素是否通过指定函数的测试。它返回一个布尔值。什么时候使用它?所有满足条件的项都可以使用everyconsttoto=[2,4]toto.every(val=>val%2===0)//trueconstfalsyToto=[2,4,5]falsyToto.every(val=>val%2===0)//只要满足条件就为false,使用someconsttoto=[2,4,5]toto.some(val=>val%2!==0)//returntrue6.不要使用delete来删除属性从对象中删除属性是非常糟糕的(性能差),此外,它还有很多副作用。但是如果你需要删除一个属性,你应该怎么做呢?一个没有这个属性的新对象可以按如下方式创建:constremoveProperty=(target,propertyToRemove)=>{const{[propertyToRemove]:_,...newTarget}=targetreturnnewTarget}consttoto={a:55,b:66}consttotoWithoutB=removeProperty(toto,'b')//{a:55}7.只在对象存在时才给对象添加属性给对象添加属性,我们可以这样写:consttoto={name:'toto'}constother={other:'other'}//条件不重要constcondition=trueif(condition){other.name=toto.name}?不是很好的代码?可以使用更优雅的东西!constcondition=trueconstother={other:'other',...condition&&{name:'toto'}}8.使用模板字符串在JS中学习字符串时,需要用变量拼接起来consttoto='toto'constmessage='你好'+toto+'!'//toto你好!如果还有其他变量,我们就得写很长的表达式可以使用模板字符串进行优化。consttoto='toto'constmessage=`hellofrom${toto}!`//hellofromtoto!9.条件简写当条件为真时,进行一些操作,我们可以这样写:if(condition){toto()}这个方法可以简写为&&:condition&&toto()10.设置a的默认值variable如果你需要为一个变量设置一个默认值,你可以这样做:'新值'console.log(toto)//默认值11。如果你需要知道使用控制台定时器的函数的执行时间,你可以这样做:for(i=0;i<100000;i++){//somecode}console.timeEnd()//Thebugsthatmayexistxms代码部署后无法实时获知,解决这些bug花费了很多时间,之后就是日志调试的时候了。顺便推荐一个好用的BUG监控工具,Fundebug。原文:https://dev.to/codeoz/improve...交流有梦想,有干货,微信搜索【伟大的走向世界】关注这位凌晨还在洗碗的洗碗智慧。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。
