一、生成器(实现了迭代器):
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属性。