1、ES7Array.includes()判断数组是否包含某个值,返回Boolean{constarr=[1,2,3,4,5];//之前if(arr.indexOf(1)>-1){//编码}//之后if(arr.includes(1)){//编码}}2.ES8Object.values()返回所有可枚举的valuesintheobject{constobj={name:'coding',sex:'male'}//beforeletarr=[]for(letiinobj){arr.push(obj[i])}//improvedletarr=Object.values(obj)}3、ES9循环异步等待(异步迭代器)在for循环中,使用异步等待{/**按照arr数组中方法的顺序执行*/letdeplay=(计时器)=>newPromise((resolve,reject)=>{setTimeout(()=>{resolve(timer);},timer);});让arr=[deplay(3000),deplay(5000),deplay(2000)];for(letitemofarr){item.then((res)=>{console.log(res);//3000,5000,2000});}}使困惑?都是异步等待,为什么第一个3000执行完之后,应该在等待5000再次执行,但是感觉没等5s,等了下个2000。4.ES10Array.flat()将多维数组展开为一维数组{/***flat将多维数组展平,返回一个新数组,不改变原来的数组*flat(argument)argument参数为嵌套层数。默认情况下,只会展开一层。如果参数设置为Infinity,可以扩展到最后一层*/constarr=[[1,2],[3,4],[5,6],[[7,8],[9,10],],];//默认只会展开一层letopenArr1=arr.flat();控制台日志(openArr1);//[1,2,3,4,5,6,[7,8],[9,10]]//无穷大为正无穷大,展开到最后一层letopenArr2=arr.flat(Infinity);控制台日志(openArr2);//[1,2,3,4,5,6,7,8,9,10]}5、ES11optionalchainoperator{/***判断一个对象是否具有某个属性*///constname之前=obj&&obj.name;//改进的constname=obj?.name}6、ES11空值合并运算符??当左边为空时||undefined,returntherightsideoperator{/***判断一个值是否不为null,undefined,""*///beforeif(val!==null&&val!==undefined&&val!==''){//Coding}//改进if((value??'')!==''){//编码}}7、ES11空赋值运算符??=左边为空时||未定义,执行赋值{//在letname=window.name之前?window.name:''//改进letname=window.name??=''}
