任何编程语言的速记技巧都可以帮助您编写更简洁的代码,让您以更少的代码实现目标。让我们一一了解JavaScript速记技巧。1.声明变量//Longhandletx;lety=20;//Shorthandletx,y=20;2.为多个变量赋值我们可以使用数组解构在一行中为多个变量赋值。//Longhandleta,b,c;a=5;b=8;c=12;//Shorthandlet[a,b,c]=[5,8,12];3.三元运算符我们可以使用三元(条件)运算符,这里省去5行代码。//Longhandletmarks=26;letresult;if(marks>=30){result='Pass';}else{result='Fail';}//Shorthandletresult=marks>=30?'Pass':'Fail';4.分配默认值如果预期值不正确,我们可以使用OR(||)短路运算符为变量分配默认值。//LonghandletimagePath;letpath=getImagePath();if(path!==null&&path!==undefined&&path!==''){imagePath=path;}else{imagePath='default.jpg';}//ShorthandletimagePath=getImagePath()||'default.jpg';5.AND(&&)短路操作如果只在某个变量为真时才调用函数,那么可以用AND(&&)短路来写。//Longhandif(isLoggedin){goToHomepage();}//ShorthandisLoggedin&&goToHomepage();当你想在React中有条件地渲染一个组件时,这与(&&)短路写法更有用。例如:
{this.state.isLoading&&}
6.交换两个变量要交换两个变量,我们通常使用第三个变量。我们可以使用数组解构赋值来交换两个变量。letx='Hello',y=55;//Longhandconsttemp=x;x=y;y=temp;//简写[x,y]=[y,x];7.箭头函数//Longhandfunctionadd(num1,num2){returnnum1+num2;}//Shorthandconstadd=(num1,num2)=>num1+num2;参考:JavaScript箭头函数https://jscurious.com/javascript-arrow-function/8.我们一般对模板字符串字符使用+操作来拼接字符串变量。使用ES6的模板字符串,我们可以以更简单的方式实现这一点。//Longhandconsole.log('Yougotamissedcallfrom'+number+'at'+time);//Shorthandconsole.log(`Yougotamissedcallsfrom${number}at${time}`);9.多行字符串对于多行字符串,我们一般使用+运算符和一个换行转义符(\n)。我们可以使用(`)以更简单的方式完成此操作。//Longhandconsole.log('JavaScript,通常缩写为JS,是一种\n'+'符合\n'+'ECMAScript规范的编程语言。JavaScript是高级的,\n'+'通常是即时编译的,并且是多范式的。');//速记控制台.log(`JavaScript,通常缩写为JS,是一种符合ECMAScript规范的编程语言。JavaScript是高级的,通常是即时编译的,并且是多范式的。`);10.多条件校验对于多值匹配,我们可以把所有的值放到一个数组中,然后使用indexOf()或者includes()方法。//Longhandif(value===1||value==='one'||value===2||value==='two'){//Executesomecode}//Shorthand1if([1,'one',2,'two'].indexOf(value)>=0){//Executesomecode}//Shorthand2if([1,'one',2,'two'].includes(value)){//Executesomecode}11.对象属性复制如果对象的变量名和属性名相同,那么我们只需要在对象语句中声明变量名,而不用同时声明键和值。JavaScript自动使用键作为变量名,使用值作为变量的值。letfirstname='Amitav';letlastname='Mishra';//Longhandletobj={firstname:firstname,lastname:lastname};//Shorthandletobj={firstname,lastname};12.有一些内置的字符串转数字方法,例如parseInt和parseFloat可以用来将字符串转数字。我们也可以通过在字符串前提供一个一元运算符(+)来简单地做到这一点。//Longhandlettotal=parseInt('453');letaverage=parseFloat('42.6');//shorthandlettotal=+'453';letaverage=+'42.6';13.多次重复一个字符串,以便重复一个字符串N其次,可以使用for循环。但是使用repeat()方法,我们可以用一行代码来完成。//Longhandletstr='';for(leti=0;i<5;i++){str+='Hello';}console.log(str);//HelloHelloHelloHelloHello//简写'Hello'.repeat(5);:想通过向某人??发送100次“对不起”的短信来道歉吗?尝试使用repeat()方法。如果你想每次都在一个新行上重复这个字符串,你可以在字符串后面添加一个\n。'对不起\n'.repeat(100);14.求幂我们可以使用Math.pow()方法来获取一个数的幂。有一个更短的语法可以做到这一点,双星号(**)。//Longhandconstpower=Math.pow(4,3);//64//Shorthandconstpower=4**3;//6415.双非位运算符(~~)双非位运算符是Math.floor()方法的缩写。//Longhandconstfloor=Math.floor(6.8);//6//Shorthandconstfloor=~~6.8;//6Caleb评论的改进:双重非位运算符仅对32位整数有效,例如(2**31)-1=2147483647。因此对于任何大于2147483647的数字,双重否定运算符(~~)会给出错误的结果,在这种情况下建议使用Math.floor()方法。16.查找数组中最大和最小的数我们可以使用for循环遍历数组中的每个值并找到最大或最小值。我们还可以使用Array.reduce()方法来查找数组中最大和最小的数字。但是使用扩展符号,我们可以在一行中完成。//速记constarr=[2,8,15,4];Math.max(...arr);//15Math.min(...arr);//217.for循环为了遍历一个数组,我们一般使用传统的for循环。我们可以使用for...of遍历数组。为了获得每个值的索引,我们可以使用for...in循环。letarr=[10,20,30,40];//Longhandfor(leti=0;i
{letnewObject={};Object.keys(obj).map(key=>{if(typeofobj[key]==='object'){newObject[key]=makeDeepClone(obj[key]);}else{newObject[key]=obj[key];}});returnnewObject;}constcloneObj=makeDeepClone(obj);//ShorthandconstcloneObj=JSON.parse(JSON.stringify(obj));//Shorthandforsinglelevelobjectletobj={x:20,y:'hello'};constcloneObj={...obj};来自评论的改进:如果您的对象包含function、undefined或NaN值,则JSON.parse(JSON.stringify(obj))将不起作用。因为当你JSON.stringify一个对象时,包含function、undefined或NaN值的属性会从对象中移除。因此,当您的对象仅包含字符串和数值时,可以使用JSON.parse(JSON.stringify(obj))。参考:JSON.parse()和JSON.stringify()https://jscurious.com/difference-between-json-parse-and-json-stringify/20。获取字符串中的字符letstr='jscurious.com';//Longhandstr.charAt(2);//c//Shorthandstr[2];//c