结合工做中使用状况,简单对es6进行一些复习总结,包括经常使用的语法,api等,以及短期内要上手须要重点学习的知识点(不一样工做环境可能有一些差异),主要参考连接是阮一峰的博客以及外文博客(阮老师大部分文章是直接翻译的这个博客) http://2ality.com/p/about.htmlhtml
先说一下ECMAScript,ECMA是一个标准化组织,他们制定了JavaScript的语言标准,因此以后一直称为ECMAScript,普遍的讲,Javascript是其一种标准实现,包括ECMAScript,dom,bom等es6
ECMA组织每一年都会有新标准发布,标准名为ES+年份,因此咱们会听到ES2015,ES2016,ES2017等,ES6其实就是ES2015,表示在15年发布的最新版本,相应的ES2016,ES2017分别称为ES7和ES8,依次日后对应。编程
如今大部分博客,文章,分享中提到的ES6其实也能够理解为ES6+,只不过由于2015年以前,ECMAScript有不少年没有发版(也有历史缘由:ES4的夭折),积累了大量的新语法,api,因此在2015年一次性加在了ES6版本中发布,以后每一年都只有不多的一些新增,好比:api
关于语法提案的流程,简单了解一下:一个新的语法从提案到成为标准须要通过五个阶段,每一个阶段都须要标准委员会TC39定时开会进行批准数组
流程见连接:http://exploringjs.com/es2016... 浏览器
须要注意的一点,全部的标准都是基于实现的,几大厂商浏览器对提案的实现必须先于标准才会进入定稿阶段,包括Babel数据结构
咱们经常使用的async和await,就是由于16年开会的时候没有达到可定案的标准,而没有进入ES2016标准,最后添加在2017标准中app
可参考该连接,有每一年发布标准中新增的特性:http://2ality.com/2017/02/ecm...dom
下面主要就是结合平时工做,简单介绍最经常使用的语法,类方法以及实例方法等,下面主要是一些列举,大部分知识点想深刻学习的话,仍是获得阮老师博客或者外文博客上学习ecmascript
不过我标注了实际工程中的使用频率,能够参考,针对性的学习,快速上手
提示:实际开发中结合eslint能够帮助本身写出更规范的代码
使用频率极高(为方便一块儿介绍,会将一些不经常使用的语法也列出来,标题括号中也为大量使用):
这是最基础的两个命令,都是声明变量,要强制全部的声明都使用他们两个
与var的区别:
做用域
const与let区别:
咱们能够直接在经过 param = 1 的形式设置默认值
包括为函数参数设置,为解构设置(见下面介绍)
避免了之前的这种写法:
function test(data) { data = data || {}; ... } // 能够直接写为 function test(data = {}) { ... }
须要注意的是:默认值生效的条件是,严格等于 undefined,若是值为null,不会使用默认值
解构赋值其实就是为了更方便的从数组或者对象中经过属性名取数据,熟练使用以后,配合默认值,rest操做符能够很大程度提升效率,简化代码
下面是一些简单的使用对比
var a = 1, b = 2, c = 3; // 或者 var param = { a: 1, b: 2, c: 3 }; var a = param.a || 1; // 默认值 var b = param.b; var c = param.c; // 或者 function add(param) { param = param || {}; var v1 = param.v1 || 0; var v2 = param.v2 || 0; return v1 + v2; }
能够看出来,若是参数比较多的话,代码很臃肿
若是用解构赋值,咱们能够写成这样,很简洁
let [a, b, c] = [1, 2, 3] // 或者 let {a = 1, b, c} = {a: 1, b: 2, c: 3} // 或者 function add({v1 = 0, v2 = 0} = {}){ return v1 + v2; } // 类比上面代码,其中 {v1 = 0, v2 = 0} 这个对象接收param参数,若是param未传入,设置默认值为{},进而,v1,v2从param或者默认值{}中取值,取不到的话也设置默认值
解构的核心是,=号左边经过属性名直接获取=号右边对象相应的属性
而且全部类型的数据均可以被解构,即出如今=号右边,只不过字符串,数字,布尔值出如今等号右边时会先转化为对象
使用解构能够大大改善代码的可读性,减小的冗余的代码,更灵活简洁的获取属性,设置默认值,尤为是配合rest操做符时。
使用在函数参数中(取代arguments)或者解构赋值时,方便咱们批量的获取设置数据,大量用在数组和对象中,见下面 数组部分
该语法在ES2018中成为规范,可是工做中早已大量使用,参考博客 http://2ality.com/2016/10/res...
注意:...只能出现一次而且必须出如今结尾
下面是错误的用法:
const {...rest, foo} = obj; // SyntaxError const {foo, ...rest1, ...rest2} = obj; // SyntaxError
ES6对函数进行了不少扩展,其中最经常使用的是箭头函数以及rest参数和默认值,rest参数与默认值都与解构关系密切
注意:函数参数值会造成一个新的做用域,区别于函数内做用域
这个使用频率极高,大大简洁了代码,尤为做为回调传入的时候
与es5函数区别:
2.3.4 函数式编程中尾调用和尾递归,大大优化内存,待深刻
经常使用的主要是如下几点
最经常使用的是支持模板写法,使用反引号``和${} 取代字符串拼接
// 好比: const a = ‘222’, b = ‘333’; const c = a + ‘444’ + b; const c = `${a}444${b}`
剩下的选择性了解:
主要是增长如下经常使用点
…操做符,类rest
实例方法,好比coryWithin,find,findIndex,fill,entries,keys,values,includes等
let a = [1, 2, 3], b = [2, 3, 4]; let merge = […a, …b] // [1, 2, 3, 2, 3, 4] // 替换apply function func (a, b, c) {…} // 若是须要传入一个数组,es5就要这样写 func.apply(null, [1, 2, 3]) // es6 func(…[1, 2, 3]) // 反转字符串的实现 […str].reverse().join(‘') // 类数组对象 { ‘0’: ’12’, ‘1’: ‘123’, length: ‘2' }
下面的选择性学习:
Array.form 将类数组对象或者实现了iterator接口对象转化为数组,常见的有dom集合,arguments,map,set等,使用频率通常
简化对象写法,新增一些Object类方法,使用频率极高
主要更新
简化对象写法,工做中应该全面改写
属性的遍历:
下面的选择性学习:
对上面使用频率高的知识点进行了解学习之后即可以进行基本开发了,熟练使用后天然会体会到es6的美
可是实际工做中,不可能都是这些基础语法,api,须要用到更多的高级知识点
目前咱们在大量使用的有:
这儿作简单介绍,工做之余能够本身去深刻,其中Class好理解,Module和Decorate相对也好上手
主要是Promise与Async,简单了解以后也能够快速写代码,可是当应用复杂时,仍是须要你深刻了解其工做原理
推荐首学Promise,Decorator可在用到时再学
这是重中之重,ES6提出的异步的一种解决方案,要深刻学习
也是异步的解决方案,代替Generator,更友好,语义化的使用
ES6提供的语法糖,内部使用prototype实现,以面向对象的方式实现JS
装饰器,能够对类或者类方法进行装饰,增长一些额外的行为
模块化的实现,帮助咱们拆分组合代码,模块化开发
此处还有两个概念,CommonJS和AMD模块
除了前面介绍的,剩下就是一些工做中用到比较少的特性,包括一些你经常使用可是并不知道的底层技术,好比Iterator,当你使用 … 或者for of时都会用到该知识点,建议学习
新增的数据结构,与Java中相似,目前来看,习惯未养成,使用比较少,可是建议学习
工做中会经常使用的正则语法即可以了,推荐一个连接,帮助你更好的学习使用正则:https://regexper.com/#%2Fabc%...
有时候能够用先行断言和后行断言实现一些复杂的判断
es6新增的原始数据类型,表示独一无二的值,通常使用为直接Symbol(str),Symbol.for(str),Symbol.keyFor(str)
如今有string boolean,number,undefined,null,symbol六种,JS语言内部大量使用,工做中偶尔会用,好比定义私有属性的时候
const FETCH = Symbol('fetch'); import fetch from './lib/fetch'; module.exports = { get fetch() { if (!this[FETCH]) { this[FETCH] = fetch; } return this[FETCH; }, }
Proxy即在目标对象外设置一层代理,外界真正访问到该对象时必须先访问代理
Reflect相似Proxy,是ES6为了操做对象而新增的Api,将一些Object上的对象放在了Reflect对象上,并修改了一些行为
这部分主要是新增方法,使用频率整体不高
Number新增类方法,