js
es6
es6是基于es5的进一步改进,es6新增了一些特性,相对于es5更简洁,提高了开发效率
1、let声明变量和const声明常量,两个都是块级作用域。es5中没有块级作用域,并且var有变量提升,在let中使用的变量一定要进行声明,const声明常量只能声明一次。
2、箭头函数
es6中的函数定义不再使用function(),而是利用()=>来进行定义
箭头函数和普通函数的区别:
箭头函数的this永远指向其上下文的this,任何方法都改变不了其指向,如call(),bind(),apply() 。
普通函数的this指向调用它的那个对象。
箭头函数是匿名函数,不能作为构造函数,不能使用new
箭头函数没有原型属性
箭头函数不能绑定arguments,取而代之用rest参数…解构
call、apply、bind 区别 :
call、apply 是立即调用 ,bind返回对应函数,便于稍后调用
都可以在函数调用时传递参数。call和bind方法需要直接传入,而apply需要以数组的形式传入。
改变this对象的指向问题不仅仅有call,apply,bind方法,也可以使用that变量来固定this的指向。
解构赋值: ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值
… : 展开运算符
class类的继承: 在class里面必须存在constructor,在constructor里面必须写super,extends就代表这继承的意思,super就是指向父类的构造函数,指代了整个prototype对象或者_proto_指针指向的对象,在ES6里面呢也是相同的意思,可以省去不少代码和原型链的过程。
async、await : async/await是JavaScript为了解决异步问题而提出的一种终极解决方案。async 表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。在没有await的情况下执行async函数,它会立即执行,返回一个Promise对象,并且,绝不会阻塞后面的语句。
Promise:
promise有三个状态:
1、pending[待定]初始状态
2、fulfilled[实现]操作成功
3、rejected[被否决]操作失败
当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;
promise状态一经改变,不会再变。
状态只有两种可能 分别是resolve和reject promise完成后.then()返回一个新的Promise实例,所以它可以链式调用
Promise会自动捕获内部异常,并交给rejected响应函数处理.catch(()=>{错误处理函数}) 另一种方法 .then(()=>{},()=>{错误处理逻辑})