对ES6的的了解

es6是一个新的标准,它包含了许多新的语言特性和库,是JS最实质的一次提升。

Let和Const
let用来声明变量。特点:
(1)不存在变量提升
(2)存在暂时性死区,ReferenceError
(3)不允许重复声明,let与val,let与let,let与参数
const用来声明常量:特点:
(1)一旦声明必须初始化,常量的至不能变。
(2)只在声明的块级作用域内有效
(3)不会提升,存在暂时性死区,先声明后使用 。
(4)不可重复声明。
const本质:
保证的并不是变量的值不得改动。而是变量指向的那个内存地址不得改动。对于简单数据类型来说,值就保存在变量指向的内存地址中,因而等同于常量。但对于复合类型的数据而言,变量指向的内存地址保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,这完全不能控制。

块级作用域
为什么需要块级作用域?
(1)内层变量可能会覆盖外层变量
(2)用来计数的循环变量泄露为全局变量。
块级作用域中函数声明规则:
(1)允许在块级作用域中声明函数
(2)函数声明类似于var,即会提升到全局作用域或函数作用域的头部。

(3)函数声明还会提升到块级作用域的头部。

Rest参数

用于获取函数的多于参数,这样就不需要使用arguments对象了,rest参数搭配的变量是一个数组,该变量该多余的参数放入其中。数组特有的方法都可以用于这个变量。rest参数后不能再有其他参数;函数的length属性不能包含rest参数。

箭头函数
箭头函数this的指向时固定化的,这非常有利于封装回掉函数。this指向的固定化并不是因为箭头函数内部绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部函数的this就是外层代码块的this,正因为它没有this,所以不能作为构造函数。
(1)函数体内的this对象,就是定义时所在的对象,而不是运行时所在的对象。
(2)不可以当作构造函数,就是不能使用new命令
(3)不能使用arguments对象,该对象在函数体内不存在,如果要用,可以使用rest代替
(4)不能使用yield命令,因此箭头函数不能作为Generate函数。

Promise
Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件监听--更合理和强大。
特点:
(1)对象的状态不受外界的影响。promise对象代表一个异步操作,有3种状态:pending(进行中)、Fulfiled(已成功)、Rejected(已失败)。
(2)一旦状态发生改变就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变只有两种可能:从Pending变为Fulfiled和从Pending到Rejected。
缺点:
(1)无法取消Promise,一旦新建它就会立即执行,无法中途取消。
(2)如果不设置回调函数,Promise内部抛出的错误不会反映到外界。
(3)当处于pending状态时,无法得知目前进行到哪个阶段。
方法:
(1)Promise.prototype.then()
Promise对象含有then方法,then()调用后返回一个Promise对象,意味着实例化后的Promise对象可以进行链式调用,而且这个then()方法可以接收两个函数,一个是处理成功后的函数,一个是处理错误结果的函数。
(2)Promise.prototype.catch()
catch()方法和then()方法一样,都会返回一个新的Promise对象,它主要用于捕获异步操作时出现的异常。因此,我们通常省略then()方法的第二个参数,把错误处理控制权转交给其后面的catch()函数,如下:
(3)Promise.all()
Promise.all()接收一个参数,它必须是可以迭代的,比如数组。它通常用来处理一些并发的异步操作,即它们的结果互不干扰,但是又需要异步执行。它最终只有两种状态:成功或者失败。它的状态受参数内各个值的状态影响,即里面状态全部为fulfilled时,它才会变成fulfilled,否则变成rejected。
(4)Promise.race()
Promise.race()和Promise.all()类似,都接收一个可以迭代的参数,但是不同之处是Promise.race()的状态变化不是全部受参数内的状态影响,一旦参数内有一个值的状态发生的改变,那么该Promise的状态就是改变的状态。
(5)Promise.resolve()
接受一个参数值,可以是普通的值,具有then()方法的对象和Promise实例。正常情况下,它返回一个Promise对象,状态为fulfilled。但是,当解析时发生错误时,返回的Promise对象将会置为rejected态。
(6)Promise.reject()
Promise.reject()和Promise.resolve()正好相反,它接收一个参数值reason,即发生异常的原因。此时返回的Promise对象将会置为rejected态。


你可能感兴趣的:(ES6)