JavaScript和TypeScript共享许多有用的技巧,可以替代常见的编码概念。这些代码替代方案可以帮助减少代码行数,这正是我们努力的方向。在本文中,我们将分享16个常见的TypeScript和JavaScript技巧。我们还将探讨如何使用这些简写的示例。在编写干净且可扩展的代码时,使用这些技巧并不总是正确的决定。干净的代码有时更容易阅读和更新。同样重要的是,我们的代码要清晰易读,并向其他开发人员传达意义和上下文。JavaScript中可用的所有技巧都可以用相同的语法在TypeScript中使用。唯一的细微差别是在TypeScript中指定类型。但是,TypeScript构造函数简写是TypeScript独有的。现在,让我们开始吧。1.三元运算符三元运算符是JavaScript和TypeScript中最流行的简写形式之一。它取代了传统的if...else语句。其语法如下:[条件]?[trueresult]:[falseresult]以下示例演示了传统的if...else语句及其使用三元运算符的等效速记://Longhandconstmark=80if(mark>=65){return"Pass"}else{return"Fail"}//简写constmark=80returnmark>=65?"Pass":"Fail"2.短路求值代替另一个if...else语句方法是使用短路求值。这个技巧使用逻辑或运算符||当期望值为false时,将默认值分配给变量。以下示例演示了如何使用短路评估://Longhandletstr=''letfinalStrif(str!==null&&str!==undefined&&str!=''){finalStr=str}else{finalStr='默认字符串'}//Shorthandletstr=''letfinalStr=str||'defaultstring'//'defaultstring3,nullcoalescingoperatorinvalidcoalescingoperator??类似于短路评估,它用于为变量分配默认值。但是,null合并运算符仅在预期值也为null时才使用默认值。换句话说,如果预期值为false但不为null,则不会使用默认值。以下是空合并运算符的两个示例://示例1//Longhandletstr=''letfinalStrif(str!==null&&str!==undefined){finalStr='defaultstring'}else{finalStr=str}//shorthandletstr=''letfinaStr=str??'默认字符串'//''//示例2//Longhandletnum=nullletactualNumif(num!==null&&num!==undefined){actualNum=num}else{actualNum=0}//Shorthandletnum=nullletactualNum=数??0//04.模板字面量借助JavaScript强大的ES6特性,我们可以使用模板字面量代替+来拼接多个字符串变量。要使用模板文字,请将字符串包装在``中,将变量包装在这些字符串中的${}中。下面的例子演示了如何使用模板文字来执行字符串插值:constname='Iby'consthobby='toread'//LonghandconstfullStr=name+'loves'+hobby//'Ibylovestoread'//ShorthandconstfullStr=`${name}loves${hobby}`我们还可以使用模板文字来构建多行字符串,而无需使用\n。例如://Shorthandconstname='Iby'consthobby='toread'constfullStr=`${name}loves${hobby}.Shealsolovestowrite!`5.JavaScript和TypeScript中对象属性赋值的简写,我们可以通过在对象字面量中提及变量来简写为对象赋值。为此,必须使用预期的键命名变量。下面是对象属性赋值速记的示例://Longhandconstobj={x:1,y:2,z:3}//Shorthandconstx=8consty=10constobj={x,y}6.可选链接点表示法允许我们访问对象的键或值。通过可选链,我们可以更进一步读取键或值,即使我们不确定它们是否存在或是否已设置。当键不存在时,来自可选链接的值是未定义的。请参阅下面的可选链接示例:constobj={x:{y:1,z:2},others:['test','tested']}//Longhandif(obj.hasProperty('others')&&others.length>=2){console.log('2ndvalueinothers:',obj.others[1])}//Shorthandconsole.log('2ndvalueinothers:',obj.others?.[1])//'tested'console.log('3rdvalueinothers:',obj.others?.[2])//undefined7.除了传统的点表示法,对象解构是另一种读取对象值的方式,就是将对象的值解构为自己的变量。下面的示例演示了如何使用传统的点表示法读取对象的值,与使用对象解构的速记方法相比。constobj={x:{y:1,z:2},other:'teststring'}//Longhandconsole.log('Valueofzinx:',obj.x.z)console.log('Valueofother:',obj.other)//Shorthandconst{x,other}=objconst{z}=xconsole.log('x中z的值:',z)console.log('其他值:',other)we从对象解构的变量也可以重命名。下面是一个例子:constobj={x:1,y:2}const{x:myVar}=objectconsole.log('Myrenamedvariable:',myVar)//Myrenamedvariable:18.SpreadoperatorSpreadoperationThe...用于访问数组和对象的内容。我们可以使用展开运算符来代替数组函数(例如concat)和对象函数(例如object.assign)。查看下面的示例,了解如何使用扩展运算符替换普通数组和对象函数。//Longhandconstarr=[1,2,3]constbiggerArr=[4,5,6].concat(arr)constsmallObj={x:1}constotherObj=object.assign(smallObj,{y:2})//简写constarr=[1,2,3]constbiggerArr=[...arr,4,5,6]constsmallObj={x:1}constotherObj={...smallObj,y:2}9,对象循环传统的JavaScriptfor循环语法如下:for(leti=0;i
