ES6新特性整理

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

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属性。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容