积累

成年人的成长在于一次次的积累

# E02

# Set、Map、WeakSet、WeakMap的区别?

知识点来自ES6

Set、Map、WeakSet、WeakMap这四个都是ES6新增的数据结构。

# Set

Set,类似数组结构,但是其里面元素的值都是唯一的。

Set自身是一个构造函数,用来生成Set结构;

const mySet = new Set();
[1,1,1,2,3,4,5,6,6].forEach(x=>mySet.add(x));
console.log(mySet)//见下图

Set结构有一个size属性,表示数据结构内的元素个数。 而且,Set结构可以接受一个数组(或者具有iterator接口的数据结构)来作为参数进行初始化。

const set1 = new Set([1,2,3,3]);
[...set1]  // [1,2,3]
​
数组去重的方法之一
[...new Set(Array)]
​
同理,也可以为字符串去重
[...new Set('aaa')].join('')  // [...new Set('aaa')] 返回的是['a']

​ ​注意:向set结构中添加数据时,不会发生类型转换,Set内部的比较是类似 === 的。但是唯一的区别是,Set内部的NaN===NaN,即一个Set结构内只有一个NaN。

Set结构的方法:add( value )、delete( value )、has( value ) 、clear( )。

Set的遍历方法:返回键名keys( )、返回键值values( )、返回键值对entries( )、forEach( )

其中三个方法返回的都是遍历器对象,但由于Set结构没有键名(键名和键值一样),所有keys和values方法表现是一样的。

# WeakSet

同Set,结构内不能有重复的元素,但是WeakSet只允许添加对象,且不支持遍历。弱引用。

# Map

一般用于数据存储,相比一般的对象结构{key:value} Map结构支持{ value:value },即key值可以是除字符串以为其他的类型。

const map = new Map();
const o = {key:'Map'};
​
map.set(o,'ssssss');
map.get(o); //'ssssss'
​
map.has(o); // true
map.delete(o); // true
map.has(o); //false

​
作为构造函数
const map = new Map([ ['name','ss'],['age',11] ]);
map.size; //2
map.get('name'); // 'ss'
在创建map时,就传入的两个键name和age
事实上,不止数组,任何具有Iterator接口的数据结构都可以当做参数。

Map的方法:sizs、set( key , value )、get( key )、has( key )、delete( key )、clear( )

Map的遍历方法:返回键的遍历器keys( )、返回值values( )、返回键值对entries( ) 、forEach()

# WeakMap

WeakMap与Map类似,但是只接受对象作为键名(null除外),并且WeakMap键名所指向的对象,不计入垃圾回收机制。

积累·1117

成年人的成长在于一次次的积累

积累

成年人的成长在于一次次的积累