ES6完整版知识点总结二(持续更新中)

114 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

整理ES6完整知识点,持续更新中......

对象的扩展

1.属性的简介表示方法

在ES6中是允许在大括号里面,直接写入变量和函数,作为对象的属性和方法:

  • 属性名简写
 let x = 10;
 let obj = {x};
 console.log(obj); // x=10
  • 函数简写
let obj ={fn(){}};
  • 模块中
 module.exports={
    fn
 };
 export {fn};

2.属性名表达式

ES6允许字面量定义对象时,把表达式放在[]内,作为对象的属性名:

        let str = 'myname';
        function myage(){
            return 'age';
        }
        let obj3 ={
            [str]:'wei',
            [myage()]:12
        }
        console.log(obj3) // {age: 12 ,uname: "kevin"}

3.Object.is(value1, value2)

说明:在所有环境中,只要两个值是一样的,它们就相等,Object.is()用来比较两个值是否严格相等,与严格比较运算符(===)基本一致,不用之处在于:+0不等于-0,NaN等于NaN。

image.png

4.Object.assign()

Object.assigh()方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

  • 语法:Object.assign(target,source1,source2,...);
  • 返回值:target

5. Object.keys(),Object.values(),Object.entries()

- Object.keys():获取对象的键名
- Object.values():获取对象中的键值
- Object.entries():成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组

Promise

Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理和更强大,有了Promise对象,就可以将异步操作按照同步操作的流程表达出来,避免了层层嵌套的回调地狱。

Promise简单来说就是一个容器,里面保存着某个未来才会结束的事件结果,通常是一个异步操作;Promise提供统一的API,各种异步操作都可以按照同样的方法进行处理;

  • 语法:
        // Promise是一个构造函数,使用时需要new
        let p = new Promise(function(resolve,reject){
            // 异步
            resolve(data) // 保存请求成功时的结果
            reject(err)   // 保存请求失败时的错误信息
        })
        // 把Promise容器中保存的结果拿出来
        p.then(function success(data){},function error(err){})
  • promise 有三个状态
1. pending[待定]初始状态
2. fulfilled/resolved[实现]操作成功
3. rejected[被否决]操作失败

   当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;
   promise状态一经改变,不会再变。
   
   Promise对象的状态改变,只有两种可能:
   从pending变为fulfilled
   从pending变为rejected。
   这两种情况只要发生,状态就凝固了,不会再变了。
  • Promise.prototype.then()
           then(function(data){
                // 成功,可以获取成功结果
            },function(err){
                // 失败,可以获取失败信息
            })
then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。

then方法中如果没有显式的写return,就会默认return undefined;
then方法中的return 后是一个具体的值,那么promise会直接把这个结果保存到成功状态中;
then方法中return后自己写new Promise,最终的状态就和你写的new Promise返回结果有关;

        // 链式写法
            new Promise()
            .then()
            .then() 
            .then()
            从第二个then开始,这些then都是上一个then返回的新的promise实例的then方法
  • Promise.prototype.catch()
.catch() = .then(null,function(err){})
 // catch方法可以捕获promise中任意位置的错误
  • Promise.prototype.finally()
不管Promise是成功了还是失败了,这个方法一定会执行。
  • Promise.all()
        - Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例
        - 语法:
            Promise.all([p1,p2,p3]);
        - 返回值:
            1. 当p1,p2,p3都成功时,能获取到这个三个promise的成功结果,组成一个数组
            2. 当这三个promise有任意一个失败,Promise.all就返回失败结果
  • Promise.race()
        // 获取最快执行完成的promise的结果
        - Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。
        - 语法:
            Promise.race([p1,p2,p3])
        - 返回值:
            只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。// 就是最快完成的那个promise的结果
  • Promise.resolve()
Promise.resolve()直接把promise的状态设置成功状态
  • Promise.reject()
 直接把promise的状态设置失败状态
  • Promise.allSettled()
- 接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例。只有等到所有这些参数实例都返回结果,不管是fulfilled还是rejected,包装实例才会结束。
- Promise.allSettled([p1,p2,p3]);

Generator

Generator 函数是 ES6 提供的一种异步编程解决方案,语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态,执行 Generator 函数会返回一个遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

Generator 函数是一个普通函数,但是有两个特征。

  1. function关键字与函数名之间有一个星号;

  2. 函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”)。

执行Generator后返回值遍历器对象,这个对象上有一个方法next(),调用这个方法才能执行Generator 函数内部的每一个状态。

next方法返回一个对象,它的value属性就是当前yield表达式的值hello,done属性的值false,表示遍历还没有结束。

    - 语法:
        function * demo(){
            yield Promise.resolve(123);
            yield new Promise(function(resolve,reject){
                $.get('xxx',function(data){
                    resolve(data)
                })
            })
        }
    - 用法:
        let it = demo()
        it.next()
        it.next('cs')
    - co库
        co(demo()).then(function(data){console.log(data)})

async 函数

Generator 函数的语法糖(新语法)。

  • 语法:
        async function demo(){
            await 1;
            await 2;
        };
        demo();
  • async函数对 Generator 函数的改进,体现在以下四点:
  1. 内置执行器
  2. 更好的语义
  3. 更广的适用性
  4. 返回值是 Promise
  • async函数返回一个 Promise 对象

  • Promise 对象的状态变化:默认的,async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。

  • 任何一个await语句后面的 Promise 对象变为reject状态,那么整个async函数都会中断执行,则reject的参数会被catch方法的回调函数接收到

  • await 也是状态机,只有await后的代码执行完成后才能向后执行,await还能执行promise的.then方法。正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。