本篇内容介绍了“es6增强的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! es6增强的功能:1、解构赋值,允许按照一定的模式,从数组或对象中提取值,给变量进行赋值。2、为字符串添加了遍历器接口,使得字符串可以被”for…of循环遍历。3、模板字符串,是增强版的字符串。4、标签模板,是函数调用的一种特殊形式。5、为函数的参数设置默认值。6、箭头函数的this指向上级作用域。7、允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。es6允许按照一定的模式,从数组或对象中提取值,给变量进行赋值,称为解构赋值。解构赋值在代码书写上简单易懂,语义清晰明了,方便对复杂对象中数据字段的获取。在解构中,解构的源,位于解构赋值表达式的右边,而解构的目标,在解构表达式的左边。(1),数组的解构赋值ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
let[foo,[[bar],baz]]=[1,[[2],3]]; foo//1 bar//2 baz//3 let[,,third]=["foo","bar","baz"]; third//"baz" let[x,,y]=[1,2,3]; x//1 y//3 let[head,...tail]=[1,2,3,4]; head//1 tail//[2,3,4] let[x,y,...z]=['a']; x//"a" y//undefined z//[]
本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
解构不成功,值会等于undefined。另一种情况是不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。对于 Set 结构,也可以使用数组的解构赋值。
let[x,y,z]=newSet(['a','b','c']); x//"a"
解构赋值允许指定默认值。
let[foo=true]=[]; foo//true let[x,y='b']=['a'];//x='a',y='b' let[x,y='b']=['a',undefined];//x='a',y='b' let[x=1]=[null];x//null
注意,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。
functionf(){ console.log('aaa'); } let[x=f()]=[1];
注意,ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效。如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。
上面代码中,因为x能取到值,所以函数f根本不会执行。上面的代码其实等价于下面的代码。(2),对象的解构赋值对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
let{bar,foo}={foo:'aaa',bar:'bbb'}; foo//"aaa" bar//"bbb" let{baz}={foo:'aaa',bar:'bbb'}; baz//undefined
对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
//例一 let{log,sin,cos}=Math; //例二 const{log}=console; log('hello')//hello
上面代码的例一将Math对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。例二将console.log赋值到log变量。
let{foo:baz}={foo:'aaa',bar:'bbb'}; baz//"aaa" foo//error:fooisnotdefined
上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。
对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
上面代码的例一将Math对象的对数、正弦、余弦三个方法,赋值到对应的变量上,使用起来就会方便很多。例二将console.log赋值到log变量。
上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。与数组一样,解构也可以用于嵌套结构的对象。
letobj={ p:[ 'Hello', {y:'World'} ] }; let{p:[x,{y}]}=obj; x//"Hello" y//"World"
对象的解构也可以指定默认值。
var{x=3}={x:undefined}; x//3 var{x=3}={x:null}; x//null
(3),字符串的解构赋值类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。
let{length:len}='hello'; len//5
(4)数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
let{toString:s}=123; s===Number.prototype.toString//true let{toString:s}=true; s===Boolean.prototype.toString//true
(5),函数参数的解构赋值
functionadd([x,y]){ returnx+y; } add([1,2]);//3
(6),用途1)交换变量的值
letx=1; lety=2; [x,y]=[y,x];
2)从函数返回多个值
函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。
//返回一个数组 functionexample(){ return[1,2,3]; } let[a,b,c]=example(); //返回一个对象 functionexample(){ return{ foo:1, bar:2 }; } let{foo,bar}=example();
3)函数参数的定义
解构赋值可以方便地将一组参数与变量名对应起来。
//参数是一组有次序的值 functionf([x,y,z]){...} f([1,2,3]); //参数是一组无次序的值 functionf({x,y,z}){...} f({z:3,y:2,x:1});
4)提取 JSON 数据
解构赋值对提取 JSON 对象中的数据,尤其有用。
letjsonData={ id:42, status:"OK", data:[867,5309] }; let{id,status,data:number}=jsonData; console.log(id,status,number); //42,"OK",[867,5309]
5)遍历 Map 结构
任何部署了 Iterator 接口的对象,都免费云主机域名可以用for…of循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。
constmap=newMap(); map.set('first','hello'); map.set('second','world'); for(let[key,value]ofmap){ console.log(key+"is"+value); } //firstishello //secondisworld
如果只想获取键名,或者只想获取键值,可以写成下面这样。
//获取键名 for(let[key]ofmap){ //... } //获取键值 for(let[,value]ofmap){ //... }
如果只想获取键名,或者只想获取键值,可以写成下面这样。
ES6 加强了对 Unicode 的支持,允许采用uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。
"uD842uDFB7" //"?" "u20BB7" //"7"
ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。(1)字符串的遍历器接口ES6 为字符串添加了遍历器接口,使得字符串可以被for…of循环遍历。
for(letcodePointof'foo'){ console.log(codePoint) } //"f" //"o" //"o"
(2)模板字符串模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
//普通字符串 `InJavaScript'n'isaline-feed.` //多行字符串 `InJavaScriptthisis notlegal.` console.log(`stringtextline1 stringtextline2`); //字符串中嵌入变量 letname="Bob",time="today"; `Hello${name},howareyou${time}?`
大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。
letx=1; lety=2; `${x}+${y}=${x+y}` //"1+2=3" `${x}+${y*2}=${x+y*2}` //"1+4=5" letobj={x:1,y:2}; `${obj.x+obj.y}` //"3"
模板字符串之中还能调用函数。如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。
functionfn(){ return"HelloWorld"; } `foo${fn()}bar` //fooHelloWorldbar
大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。
模板字符串之中还能调用函数。如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString方法。
字符串的新增方法1,String.fromCodePoint()
ES5 提供String.fromCharCode()方法,用于从 Unicode 码点返回对应字符,但是这个方法不能识别码点大于0xFFFF的字符。2,String.raw()
ES6 还为原生的 String 对象,提供了一个raw()方法。该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法。
String.raw`Hin${2+3}!` //实际返回"Hin5!",显示的是转义后的结果"Hin5!" String.raw`Hiu000A!`; //实际返回"Hiu000A!",显示的是转义后的结果"Hiu000A!"
3, 实例方法:includes(), startsWith(), endsWith()
3, 实例方法:includes(), startsWith(), endsWith()
传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6 又提供了三种新方法。includes():返回布尔值,表示是否找到了参数字符串。
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
lets='Helloworld!'; s.startsWith('Hello')//true s.endsWith('!')//true s.includes('o')//true
(1)标签模板标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。
leta=5; letb=10; functiontag(s,v1,v2){ console.log(s[0]); console.log(s[1]); console.log(s[2]); console.log(v1); console.log(v2); return"OK"; } tag`Hello${a+b}world${a*b}`; //"Hello" //"world" //"" //15 //50 //"OK"
(2)函数参数增强:参数默认值ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。
functionlog(x,y='World'){ console.log(x,y); } log('Hello')//HelloWorld log('Hello','China')//HelloChina log('Hello','')//Hello
(3)箭头函数的简化箭头函数的this指向上级作用域
constname='tony' constperson={ name:'tom', say:()=>console.log(this.name), sayHello:function(){ console.log(this.name) }, sayHi:function(){ setTimeout(function(){ console.log(this.name) },500) }, asyncSay:function(){ setTimeout(()=>console.log(this.name),500) } } person.say()//tony person.sayHello()//tom person.sayHi()//tony person.asyncSay()//tom
ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。除了属性简写,方法也可以简写。
constfoo='bar'; constbaz={foo}; baz//{foo:"bar"} //等同于 constbaz={foo:foo}; consto={ method(){ return"Hello!"; } }; //等同于 consto={ method:function(){ return"Hello!"; } };
1、如果key与value变量名相同,省略:value
1、如果key与value变量名相同,省略:value
2、省略函数:function
3、计算属性:[Math.random()]
constbar='bar' constobj={ bar, fn(){ console.log('1111') }, [Math.random()]:'123' } console.log(obj)
“es6增强的功能有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要讲解了“如何使用vue实现双向绑定”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用vue实现双向绑定”吧!1.使用v-model指令实现双向绑定2.利用.sync修饰符实现双向绑定3.使用mo…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。