ES6新特性整理讲解新命令1.let命令ES6新增了let命令来声明变量。它的用法与var类似,但也有新的特点。-**let声明的变量只在let命令所在的代码块中有效。适用于for循环**vara=3;变量a=4;让b=4;{变量a=5;让b=5;//作用域只在代码块内letc="thisisinnerc";vard="这是内部d";控制台日志(b);//b=5}console.log(a);//a=5console.log(b);//b=4控制台。记录(d);//这是内部dconsole.log(c);//c没有定义for循环按理说执行完for循环后,变量的值应该被释放,否则可能会影响到全局变量,所以还是声明为let比较好。//使用var语句varresult=0;for(vari=0;i<100;i++){结果+=i;};控制台日志(结果);//5050console.log(i);//101//使用let声明varresult=0;for(让i=0;i<100;i++){结果+=i;};控制台日志(结果);//5050console.log(i);//i没有定义——**没有变量提升**//先操作console.log('varvariablepromotion',a);//undefinedconsole.log('let没有变量提升',b);//错误:b未定义//declarevara=3;让b=4;-**临时死区**vartmp=123;如果(真){tmp='abc';//ReferenceErrorlettmp;}-**不允许重复声明**```vara=3;变量a=4;让b=4;让b=5;//类型错误:重复声明“b”控制台。日志(a);//a=4console.log(b);```2.const命令的基本用法:const声明一个只读常量一旦声明,常量的值就不能改变。类似于Java中的final关键字。常数PI=3.1415;圆周率=3;//TypeError:Assignmenttoconstantvariableconst声明的变量不能改变值,这意味着变量一旦被const声明,必须立即初始化,不能留待以后赋值。常量富;//SyntaxError:Missinginitializerinconstdeclaration其余特性与let相同,具有不可重复声明、块级作用域和临时死区。解构赋值ES6允许从数组和对象中提取值,并按照一定的模式给变量赋值,这称为解构。例如:让[a,b,c]=[1,2,3];这种写法本质上属于“模式匹配”。只要等号两边的模式相同,左边的变量就会被赋予相应的值。如果解构不成功,则变量的值等于undefined。另一种情况是不完全解构,即等号左边的模式只匹配等号右边数组的一部分。这种情况下,解构还是可以成功的。1.对象的解构赋值a>对象的属性没有先后顺序,变量必须和属性同名。在ES5中varobj={name="tom,age=12,};varname=obj.name;varage=obj.age;在ES6中let{name:name,age:age}=obj;let{name,age}=obj;console.log(name,age);b>如果变量名和属性名不一致,必须这样写。var{foo:baz}={foo:'aaa',bar:'bbb'};//baz="aaa"c>嵌套解构letobj={p:['Hello',{y:'World'}]};让{p:[x,{y}]}=obj;//x="你好";y="World"d>默认值(默认值生效的条件是对象的属性值严格等于undefined)var{x:y=3}={};y//32.数组解构赋值let[a,b,c]=[1,2,3];a>不完全解构让[a,[b],d]=[1,[2,3],4];//一个=1;b=2;d=4b>集合解构let[head,...tail]=[1,2,3,4];//头=1;tail=[2,3,4]c>默认值(当匹配值严格等于undefined时,默认值生效)let[x,y='b']=['a'];//x='a',y='b'd>默认值也可以是函数functionf(){console.log('aaa');}让[x=f()]=[1];让[a,b,...c]=["terry","lerry","tom","jack"];控制台日志(一);//特里;console.log(b);//乐瑞;控制台日志(c);//[“汤姆”,“杰克”]3。字符串的解构赋值a>解构时,字符串被转换为类数组对象。const[a,b,c,d,e]='你好';//a=h;b=e;c=l;d=l;e=ob>也可以解构数组的属性let{length:len}='hello';//len=5c>Numericalandbooleanvaluedeconstruction赋值解构,如果等号右边是数值或boolean值,则先转为对象let{toString:s}=123;//s===Number.prototype.toStringtruelet{toString:s}=true;//s===Boolean.prototype.toStringtrue4.函数参数解构赋值基本语法:functionadd([x,y]){returnx+y;}添加([1,2]);默认值:函数移动({x=0,y=0}={}){返回[x,y];}移动({x:3,y:8});//[3,8]移动({x:3});//[3,0]移动({});//[0,0]移动();//[0,0]解构赋值的常见用法1.交换变量的值letx=1;让y=2;[x,y]=[y,x];2.从一个函数中返回多个值functionexample(){return[1,2,3];}让[a,b,c]=示例();3、函数参数的定义functionf([x,y,z]){...}f([1,2,3]);4.提取JSON数据letjsonData={id:42,status:"OK",data:[867,5309]};让{id,status,data:number}=jsonData;5.指定输入模块方法const{SourceMapConsumer,SourceNode}=require("source-map");6.函数参数的默认值jQuery.ajax=function(url,{async=true,cache=true,global=true,beforeSend=function(){},complete=function(){},//...更多配置}){//...dostuff};7..指定参数的默认值,避免写varfoo=config.foo||函数体内的'defaultfoo';这样的语句遍历地图结构varmap=newMap();map.set('第一个','你好');map.set('第二','世界');for(let[key,value]ofmap){console.log(key+"is"+value);}----------------------------------------------------------------本期结束------------------------
