ES6知识点汇总

1.for循环括号内作用域与循环体作用域不同

2.let const声明的变量有暂时性死区

3.块级作用域必须有大括号

4.对象冻结:object.freeze();

彻底冻结


5.let const class声明的对象不是全局对象属性。

6.ES2020中设置了globalthis作为所有环境下的全局对象。

7.解构赋值

    用处:取函数返回值,取json值

    要求:具有lterator接口,结构不成功就是undefined

    1.数组解构赋值:对应模式相同的位置赋值

    2.当严格等于undefined是默认值生效,如果是表达式惰性求值

     3.对象的解构赋值:和key相同赋值,赋值的是变量不是key,key赋值完是undefined,可以取得继承值

    4.数组和对象可以嵌套赋值

    5.对象可以给数组赋值

    6.字符串也可以赋值

    7.等号右边不是对象就先转成对象再赋值

    8.给函数参数赋值中,只要传了值就不用取默认值,给参数默认值还是给参数内的变量默认值

8.字符串拓展

      1.增加遍历器,可识别大于0xFFFF码点

      2.模板字符串:反引号标识,保留空格换行,${}镶嵌变量,变量没有声明就会报错,不是string调用tostring方法

9.正则扩展:y修饰符,粘连匹配

10.三点运算符:将取出参数对象中的所有可遍历属性,拷贝到当前对象之中。

11.number扩展

    Number.isFinite ,isNaN,前者非数值一律返回flase,后者非NaN一律返回flase,只对数值有效

    将parseint,parsefloat移植到number对象上。

    Math对象扩展,Math.trunc  直接去除小数部分

12.函数扩展

        默认参数单独形成一个作用域,

        将arguments类数组对象转换成rest对象真数组,增加length属性,值为没有指定默认值的参数个数,不包括rest参数

        bind:创建一个新函数,绑定执行对上到参数对象上。

        apply:马上执行调用它的函数,参数为数组

        call:马上执行调用它的函数,参数时单个传递的

13.箭头函数

      1.没有/大于1参数要用圆括号,多余一条语句,要用大括号括起来。

      2.this对象是定义时就在的对象,没有arguments对象,不能做generator函数

      3.不适用场合:定义对象方法,需要动态this时,比如监听事件。

14.数组常用方法

      1.push/pop  改变原数组,向数组末尾添加一个元素,返回数组新的长度。

      2.shift/unshfit  前面, 改变原数组

      3.concat  返回新数组,原来的数组不变

      4.join 将字符用连接符连接返回

      5.sort(function) 默认按unicode排序,也可以按照function指定顺序

      6.map /foreach/fliter/reduce 调用每个元素,前者返回新数组,后者返回undefined。fliter返回新数组,元素为符合条件的元素,reduce递归迭代

      7.slice/splice slice同字符串slice ,splice(index,howmach,arr1)删除howmuch个元素,并插入arr1

      8.every/some,返回boolean,相当于对每个元素并或操作

15.数组扩展

      1.三点运算符与rest参数,三点运算符将数组转为逗号分割的序列,rest参数将逗号分割的序列合并成一个数组。空数组不产生任何效果。只有在函数调用时,扩展运算符参可以放入圆括号中。数组赋值只能放在最后。

      2.Array.from,将类数组对象和遍历器对象转换成数组

      3.fill填充

      4.keys,values,entries,返回遍历器对象,再用for of遍历

      5.ES5处理空位:

        forEach(), filter(), reduce(), every() 和some()都会跳过空位。

        map()会跳过空位,但会保留这个值

        join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。

        ES6将空位转换为undefined

16.Symbol表示独一无二的值,新的基本类型

      1.构造函数接受一个字符串作为描述

      2.即使参数相同,得到的Symbol也是不一样的

      3.能别的数据类型运算会报错

      4.转为boolean值为true

      5.作为属性名时不能用点运算符赋予

      6.在对象内部的定义属性时只能放在方括号里

      7.用于消除魔法字符串

      8.不会被普通的遍历机制遍历,可以用Reflect.ownKeys  API遍历

      9.Symbol.for  可以查看某个Symbol值使用过没有,使用过则重新用,没使用过就注册一个新的

17.Set和Map-新的引用型对象,增强数组和对象

      Set:值唯一的数组,接受数组初始化,NaN等于自身

      方法:

      1.操作方法;add , delete, clear,has

       2.遍历方法:遍历顺序时插入顺序,类似队列

          keys  values entries  foreach 默认values方法遍历

       Map:key可以不是字符串的对象

18.commonjs  AMD  ES6

    CommonJS:服务器端模块规范,模块同步加载,输出值的缓存

      1.单独文件作为模块,单独作用域

      2.module.exprots输出对象

      3.require读取文件并执行,返回module.exprots对象

    AMD:异步模块定义,requireJS

    ES6:统一服务器和浏览器模块化规范

      export 对外输出接口 动态绑定

      import 静态加载,按需加载,加载模块,变量名要与输出的变量名一致,变量只读

       as 重命名

      * 全部加载

        export defualt  输出的变量不需要用同名变量接

        import()动态加载,返回promise对象

19.Class语法糖

        1.constructor函数定义的属性是实例自己的属性相当于之前的构造函数

        2.其他函数均定义在原型上,供所有实例调用

        3.getter,setter,拦截属性

        4.静态方法:直接在类上调用,不被实例继承,但可以被子类继承,继承extends

20.构造函数和原型对象

    构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享。

    Object:

      getPrototypeOf 返回对象的原型

      setPrototypeOf(nowobject,newobject)为现对象设置原型对象

      create(object) 以此为原型生成对象

      assign(target,soures....)将任意多个源对象可枚举属性拷贝给目标对象

      defineProperties(obj)添加或修改自有属性

      getOwnPropertyNames (obj)返回自身属性名包括不可枚举的属性

      keys(obj) 返回可枚举属性

    Object.prototype:

      isPrototypeOf:A是否为B的原型

      propertyEnumerable: 判断是否可枚举

21.对象的扩展

      1.描述对象:object.getOwnPropertyDescriptor

       2.对象循环与枚举:尽量用object.keys()遍历

        for...in 遍历对象自身的和继承的和可枚举的

        object.keys()对象自身可枚举

        object.assign拷贝自身可枚举

        object.getOwnPropertyNames自身可枚举+不可枚举

        object.getOwnpropertySymbols 返回Symbol属性键名

         reflect.ownKeys所有键名

      遍历顺序:

        首先遍历所有数值键,按照数值升序排列。

        其次遍历所有字符串键,按照加入时间升序排列。

        最后遍历所有 Symbol 键,按照加入时间升序排列。

      3.三点运算符:将所有自身可遍历但尚未被读取的属性浅拷贝到新对象上。非对象报错。

      4.链判断运算符 ?.

      5.Null判断运算符 ??

      6.深拷贝:序列化和反序列化,reflect.ownkeys遍历,lodash库

22.新增方法

    1.object.assign,只能拷贝原始对象自身的值,不能克隆继承的值,想要克隆值可以

    object.assign(object.create(object.getprototypeof(obj)),origin),symbol值也会被拷贝

        用途:

            1.为对象增加属性

            2.为对象添加方法

            3.克隆对象

    3.object.getownpropertydescriptors:返回描述对象,主要解决object.assign不能拷贝get set方法问题


      4.object.getprototypeof  object.setprototypeof    object.create

23.promise,异步编程,为解决回调函数hell 出现

      1.Promise对象,异步事件包含容器,对象状态不受外界影响,一旦状态改变就不会再改变

      2.状态:pending 进行中  fulfilled已成功  rejected 已失败

      3.缺点:

              无法取消      不设置回调函数,内部错误无法捕捉 ,pending状态无法查看进度

      4.使用:

            new Promise(function(resolve->将状态改变为成功,reject->将状态改为失败,并传出报错){})    实例生成后可用 then函数指定成功,失败的回调函数 then(function1,function2)参数为promise参数传出对象

      5.特点:promise新建后马上执行

      6.resolve,reject参数:会将这个函数传递给回调函数,如果参数是promise对象,主promise自身状态无效,按照参数promise状态触发回调。

      7.then:方法返回新的promise实例,前一个then,return的值作为下一个then的参数,只能接受函数作为参数,不是函数直接跳过。

      8.catch:对前面promise对象错误的捕获,不指定错误无法被捕获,promise内部报错不会影响外部代码执行

      9.finally:不管对象最终状态如何都会执行这个回调

      10.一些函数:

              1.promise.all([p1,p2,p3]):参数可以不是数组但必须有遍历器接口

                      p的状态:

                                1.所有成功才会变成成功,返回所有实例返回值组成的数组

                                2.有一个reject就会reject,返回值为第一个reject的返回值

                      注意:如果参数promise对象自己捕获了错误,p不会接收到错误

            2.promise.race([p1,p2,p3]):

                      p的状态:就是参数中第一个改变的状态

            3.promise.allSettled([p1,p2,p3]):

                      p的状态:等所有参数实例都完成后(无论成功还是失败),就会变成fulfilled

                      回调函数参数是promise实例数组

            4.promise.any([p1,p2,p3]):

                      p的状态:有一个成功就成功,所有失败才失败

            5.promise.resolve():

                      1.参数是promise实例:原封不动返回这个实例

                      2.thenable对象:转成promise对象,再马上把then方法加入异步队列

                      3.不是thenable对象或不是对象:返回新的promise实例,再将状态变成成功。

                      4.不带任何参数:同3,then回调无参数

                      5.立即resolve的promise在本轮事件循环结尾执行

            6.promise.reject():返回一个状态为reject的promise对象,catch参数是该函数的参数

24.iterator遍历器

    1.作用:提供统一的遍历接口

                使元素按某种次序排序

                供for of消费

    2.默认的iterator接口部署在数据结构的Symbol.iterator属性上,执行这个函数会返回一个遍历器

    3.使用接口遍历的场合:

              1.解构赋值

              2.扩展运算符

              3.接受数组作为参数的场合,数组的遍历器接口只返回具有数字索引的属性

    4.for in遍历对象,for of遍历数组

25.Generator状态机   

      1.函数语法

            1.写法:function * name(){} ,函数内部有 yield 表达式定义每个状态

            2. 函数调用: 返回一个遍历器对象,用next方法移动,遇到yield表达式就暂停执行,将yield表达式后面的表达式值返回,作为value的值,如此这般直到return,没有return则返回对象的value属性值为undefined

            3.next方法调用:返回一个有value和done属性的内部状态对象

            4.yield表达式只能放在generator函数内,如果在另一个表达式中,必须放在圆括号里面,用作参数或赋值表达式的右边,可以不加括号

            5.next方法参数:函数内部的yield表达式没有返回值,若想将前一步状态传到下一步就在next函数中添加参数     

            6.for of遍历generator函数返回的遍历器对象,最后一个值不会返回

            7.for of循环,拓展运算符,解构赋值,Array.from都是使用这个遍历器对象

            8.原型函数:

                1.Generator.prototype.throw:遍历器对象在函数体外抛出错误,函数体内捕获,如果函数体内没有部署try...catch代码块,将会被外部的try...catch代码块捕捉,throw方法被捕获以后,会附带执行yield表达式,不影响遍历,一旦内部错误没有被捕获,函数运行提前结束。

                2.Generator.prototype.return:返回给定的值,并终结函数,不提供参数,返回对象value为undefined

            9.next,throw,return:

                  next函数是将yield表达式替换成一个值

                  throw函数是将yield表达式替换成一个throw语句

                return是将yield表达式替换成一个return语句

            10.yield *:用在Generator函数内部调用另一个generator函数,后面跟一个遍历器对象,遍历遍历器对象   

            11.作为对象属性:简写成 * functionname(){}

            12.协程与线程:,同一时间可以有多个线程处于运行状态,但是运行的协程只能有一个,其他协程都处于暂停状态。此外,普通的线程是抢先式的,到底哪个线程优先得到资源,必须由运行环境决定,但是协程是合作式的,执行权由协程自己分配。

26.Generator函数的异步应用

          1.特性:Generator 函数可以暂停执行和恢复执行,函数体内外的数据交换和错误处理机制。

          2.Thunk函数,传名调用,将多参数函数转换成一个只接受回调函数作为参数的函数

          3.Thunkify模块:将控制权由回调函数返回。

          4.co模块:将控制权由promise.then返回

          5.async/await:

              1.与Generator区别:自带执行器,await命令后面可以是promise对象和原始类型的值,返回值是promise对象。

              2.语法:

                  1.async函数内部的return语句的值会作为then方法回调函数的参数。

                  2.async函数内部抛出错误,会导致返回的 Promise 对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

                  3.返回的promise对象只有当函数体内的全部异步操作完成后才能改变状态。

                  4.任何一个await后面的promise状态变为reject,后序都不会执行,并抛出错误,可以用try...catch块包裹,使后面的语句照常执行

                  5.没有前后关系的两个异步操作,让其同步触发   


                    6.async函数保留运行栈

你可能感兴趣的:(ES6知识点汇总)