当前位置: 首页 > Web前端 > HTML

ES6、7、8常用新特性汇总(超实用)

时间:2023-04-02 20:11:38 HTML

ES6常用新特性1.变量声明也使用let&&constlet命令,但作用域是局部的{leta=10;变量b=1;}inB可以在函数外获取,但是a是获取不到的,所以比如for循环计数器就适合用let。const用于声明一个常量,设置后值不会改变constPI=3.1415;PI//3.1415PI=3;//TypeError:赋值给常量变量。从对象中提取值并为变量赋值称为解构。例如数组:let[a,b,c]=[1,2,3];//等价于leta=1;letb=2;letc=3;这确实让代码看起来更加优雅,有一种python赋值的似曾相识感。对象解构赋值:获取一个对象的多个属性,并用一条语句将它们赋值给多个变量。var{StyleSheet,Text,View}=React;等同于varStyleSheet=React.StyleSheet;varText=React.Text;varView=React.View;3.箭头函数ES6中新增的箭头运算符用于简化函数的写法,运算符左侧为参数,右侧为具体操作和返回值。varsum=(num1,num2)=>{返回num1+num2;}//等同于varsum=function(num1,num2){returnnum1+num2;};箭头函数还固定了this的指向,使其始终指向词法范围的指针:varobj={birth:1990,getAge:function(){varb=this.birth;//1990varfn=()=>newDate().getFullYear()-this.birth;//this指向obj对象returnfn();}};obj.getAge();//254....运算符的引入几乎没有使用扩展函数。它允许将数组作为参数直接传递给函数:varpeople=['Lily','Lemon','Terry'];functionsayHello(people1,people2,people3){console.log(`Hello${people1},${people2},${people3}`);}sayHello(...people);//输出:HelloLily,Lemon,特里5.可迭代类型为了统一集合类型,ES6标准引入了一种新的可迭代类型,Array,Map和Set都属于可迭代类型,可迭代类型的集合可以通过新的for...of循环遍历。vara=['A','B','C'];vars=newSet(['A','B','C']);varm=newMap([[1,'x'],[2,'y'],[3,'z']]);for(varxofa){//遍历数组alert(x);}for(varxofs){//遍历Setalert(x);}for(varxofm){//遍历Mapalert(x[0]+'='+x[1]);}Map相关操作如下,Set同理:varm=newMap();//空Mapm.set('亚当',67);//添加一个新的键值m.set('Bob',59);m.has('亚当');//key是否存在'Adam':truem.get('Adam');//67m.delete('亚当');//删除键'Adam'm.get('Adam');//未定义6。ClassES6提供了一种更接近于传统语言的书写方式,引入了类(class)的概念作为对象的模板。使用class关键字,可以定义类,类似于大多数传统语言。//定义类classPoint{constructor(x,y){this.x=x;这个.y=y;}toString(){返回'('+this.x+','+this.y+')';}}7.Setvararr=[1,2,3,3,3,3,14]varset=newSet(arr)vararr=Array.from(set)console.log(arr)//1,2,3,14ES7常用新特性1.Array.prototype.includes检查一个值是否存在于数组或列表中letarr=['react','angular','vue']//Correctif(arr.includes('react')){console.log('CanuseReact')}你也可以在字符串中使用include:letstr='ReactQuickly'//Correctif(str.toLowerCase().includes('react')){//trueconsole.log('Found"react"')}除了增强可读性和语义之外,它实际上给开发者返回了一个布尔值,而不是匹配的位置。includes也可以用于NaN(不是数字)。最后,包括第二个可选参数fromIndex,这有利于优化,因为它允许从特定位置开始寻找匹配项。更多示例:console.log([1,2,3].includes(2))//===true)console.log([1,2,3].includes(4))//===false)console.log([1,2,NaN].includes(NaN))//===true)console.log([1,2,-0].includes(+0))//===true)console.log([1,2,+0].includes(-0))//===true)console.log(['a','b','c'].includes('a'))//===true)console.log(['a','b','c'].includes('a',1))//===false)2.求幂运算符(求幂)eta=7**12letb=2**7console.log(a===Math.pow(7,12))//trueconsole.log(b===Math.pow(2,7))//true开发者也可以操作结果:leta=7a**=12letb=2b**=7console.log(a===Math.pow(7,12))//trueconsole.log(b===Math.pow(2,7))//trueES8的新特性1.Object.values/Object.entriesES5引入了Object.keys方法,返回一个数组,其成员都是参数对象本身的可用参数(不包括继承的)可迭代(可枚举)属性的键名。Object.values方法返回一个数组,其成员为参数对象本身(不包括继承的)所有可遍历(可枚举)属性的键值。Object.entries方法返回一个数组,其成员是参数对象本身(不包括继承的)的所有可遍历(可枚举)属性的键值对。让{keys,values,entries}=Object;让obj={a:1,b:2,c:3};for(letkeyofkeys(obj)){console.log(key);//'a','b','c'}for(letvalueofvalues(obj)){console.log(value);//1,2,3}for(let[key,value]ofentries(obj)){console.log([key,value]);//['a',1],['b',2],['c',3]}2.Stringpadding(字符串填充)3.Async/AwaitUsingPromise使用Promise写异步代码会比较多麻烦:axios.get(`/q?query=${query}`).then(response=>response.data).then(data=>{this.props.processfetchedData(data);}).catch(error=>console.log(错误));使用Async/AwaitAsync/Await使异步代码看起来像同步代码,这就是它神奇的地方:asyncfetchData(query)=>{try{constresponse=awaitaxios.get(`/q?query=${query}`);constdata=response.data;returndata;}catch(error){console.log(error)}}fetchData(query).then(data=>{this.props.processfetchedData(data)})异步/等待是一种编写异步代码的新方法。前面的方法有回调函数和Promise。与Promise相比更简洁,处理错误、条件语句、中间值更方便