ES6新特性学习
ES6中的新特性主要包括定义变量、立即执行函数、生效的注释、参数默认值指定、可变参数、代理对象
解构赋值、模板字符串、正则扩展、数字扩展、set和Map、函数扩展、对象扩展、Iterator、Generator、Symbol、Module、Class
1.变量定义
es5中 var 定义一切变量,定义常量需要Object.defineProperty(window,''PI',{value:3.1415926,writble:false})
es6中 let定义的变量在代码块中生效,const定义常量,如const PI=3.1415926
2.关于闭包的理解
闭包应该是在一个函数体内返回了另一个函数体,父函数被调用时才会返回子函数,此时子函数的入参才会赋值。
3.立即执行函数
es6中用{}代替,可以起到代码隔离的作用,可以在{}中定义相同的常量,也不会报错。
4.注释的生效
如vscode启动插件eslint,就会对代码进行校验,添加注释/* eslint-disable*/就会使插件校验失效。
5.参数默认值得指定
es5中需要在函数体内判断入参再赋值,es6写法更简单 function f(x,y=7,z=42){}
es6还可以在此处做参数校验function f(x=check(),y=7){}
6.可变参数
当不知道有多少个入参时,可以使用可变参数...扩展运算符,function f(...a){}
7.代理对象
需要保护data对象中的sex属性,不被修改时,各版本的做法:
es3:var person=function(){
var data={name:“yx”,sex:“man”};
this.get=function(){return data[key]};
this.set=function(key,value){ //做判断禁止赋值}
}
//实例化person,data并没有绑定到person上,所以不能被外部访问到,给person增加get方法可以得到data数据。
// 调用person.get()()会先构建person函数对象,该函数持有一个data对象,并提供一个访问data对象的方法。
es5:var data={name:“yx”,sex:“man”}; object.defineProperty(data,sex,{value:'man',writle:false}) // 实现sex属性
es6:let person={name:'yx,sex:"man"} ; let person=new Proxy{person,{get(target,key){return target[key]},set(target,key,value){//做判断禁止赋值}}}