ES6新特性整理

作者: 爱敷面膜的developer | 来源:发表于2017-12-28 16:50 被阅读3次

    一、生成器(实现了迭代器):

    1、声明方式:*例如:function *foo(){}。

      2、功能:交互式运行代码,在程序运行过程中可以暂停并返回内容,外部也可以向程序内部传递参数让程序继续运行。

         3、yield关键字:表示暂停程序并返回内容。

    4、yield *关键字yield*后接生成器将生成器插入当前代码段,yield *后接迭代器则迭代其中内容并将每一项解析为yield item;插入当前代码段。

         5、调用生成器时使用return:表示提前完成,中止生成器。

         5、例如:

              function *foo(){

                  var x = 3,y = 4;

                   var z = yield 3 * 4;

                   console.log(z); 

              }

              var it = foo();

              it.next();    // 启动生成器,运行到第一个yield并得到{value:12,done:false};

              // it.return();    // 如果使用该方法会提前中止生产器,并得到{value:undefined,done:false}

              it.next(5);     // 继续运行并传入5(为z赋值为5),得到{value:undefined,done:true}

    二、类:

         1 、声明方式:class foo {}

         2、constructor:表示类的构造函数。初始化类,如:constructor(a,b) {this.x = a; this.y = b;}。

         3、extends和super:表示继承,其中super()必须写到this调用之前,super用来调用父类属性(调用变量:super(a,b),调用方法:super.gimme())。

         4、new.target:表示最小调用类(也就是子类)的静态属性和方法。

         5、例如:

    class Foo {

    constructor

    (a,b) {this.x = a;this.y = b;}

    gimmeXY

    () {return this.x * this.y;}

    }

    class Bar extends Foo {

        constructor(a,b,c) {super( a, b );this.z = c;}

    gimmeXYZ

    () {return super.gimmeXY() * this.z;}}

    var b = new Bar( 5, 15, 25 );

    b

    .x;                        // 5

    b

    .y;                        // 15

    b.z;                        // 25

    b.gimmeXYZ();               // 1875

    三、数据类型:

         1、Buffer和Buffer的多视图:

              1-1、创建Buffer:new ArrayBuffer(len(buffer长度));

              1-2、创建Buffer多视图:

                   Int8Array()(8位有符号整型)

    Uint8Array()(8位无符号整型)

    Uint8ClampedArray()(8位无符号整型,每个值都会被设置在0~255之间)

                   Int16Array()(16位有符号整型)

    Uint16Array()(16位无符号整型)

                   Int32Array()(32位有符号整型)

    Uint32Array()(32位无符号整型)

    Float32Array()(32位有符号浮点数,IEEE-754)

    Float64Array()(64位无符号浮点数,IEEE-754)

                   例如:

    var buf = new ArrayBuffer( 2 );

    var view8 = new Uint8Array( buf );var view16 = new Uint16Array( buf );

    view16

    [0] = 3085;

    view8

    [0];                       // 13

    view8

    [1];                       // 12

    view8

    [0].toString( 16 );        // "d"

    view8

    [1].toString( 16 );        // "c"

    // 交换(就像大小端变换一样!)var tmp = view8[0];

    view8

    [0] = view8[1];

    view8

    [1] = tmp;

    view16[0];                     // 3340

         2、Map和WeakMap:

              2-1、Map和WeakMap的区别:WeakMap键只能是对象并且是弱持有键,如果对象被删除,则该对象在WeakMap中对应的键值对也被GC。

              2-2、初始化Map:接收参数:一个数组,数组里每一项第一个元素是key值,第二个元素是value。entries()正好有该功能(如:m.entries()得到的内容就是例子中Map()括号里的内容)。

    var x = { id: 1 },

        y = { id: 2 };

    var m = new Map( [[ x, "foo" ],[ y, "bar" ]] );

    m

    .get( x );                   // "foo"

    m.get( y );                   // "bar"

              2-3、Map方法:

                   set():添加键值对,接收参数:一个任何内容(key)、一个任何内容(value)

                   get():获取值,接收参数:一个任何内容(key)

                   delete():删除键值对,接收参数:一个任何内容(key)

                   clear();清除整个Map,不接收参数

                   values():得到Map中的值,返回一列值迭代器

                   keys():得到Map中的键,返回一列键迭代器

                   has():判断Map中是否有指定Key值,接收参数:一个任何内容

              2-4、Map属性:

                   size:获取Map中键值对数量

    2-5、初始化WeakMap:接收参数:一个数组,数组里每一项第一个元素是key值,第二个元素是value。entries()正好有该功能(如:m.entries()得到的内容就是例子中Map()括号里的内容)。

    var x = { id: 1 },

        y = { id: 2 };

    var m = new WeakMap( [

        [ x, "foo" ],[ y, "bar" ]] );

    m

    .get( x );                   // "foo"

    m

    .get( y );                   // "bar"

              2-6、WeakMap方法:和Map相比没有clear()方法

    2-7、WeakMap属性:和Map相比没有size属性

         3、Set和WeakSet:

              3-1、Set和WeakSet的区别:WeakSet是弱持有,如果WeakSet中的内容是对象,且该对象被删除,则在WeakSet中也被GC。

              3-2、初始化Set:接收参数:一个数组(普通数组或者一个iterable数组)每一项是一个任何内容。

    var s = new Set( [1,2,3,4,"1",2,4,"5"] ),

    uniques

    = [ ...s ];

    uniques;                        // [1,2,3,4,"1","5"]

              3-3、Set方法:(Set的方法和Map的方法类似只是add()方法替代了set()方法,并且没有get()方法)

              3-4、Set属性:Set的属性和Map的属性相同

              3-5、初始化WeakSet:不接收参数

    var s = new WeakSet();

    var x = { id: 1 },

    y

    = { id: 2 };

    s

    .add( x );

    s

    .add( y );

    x

    = null;                      // x可GC

    y = null;                      // y可GC

              3-6、WeakSet方法:和Set相比没有clear()方法。             

              3-7、WeakSet属性:和Set相比没有size属性。

    相关文章

      网友评论

        本文标题:ES6新特性整理

        本文链接:https://www.haomeiwen.com/subject/piyvgxtx.html