ES6新增数据结构:Set,Map,WeakSet,WeakMap

1.Set

Set对象类似于数组,且成员的值都是唯一的,允许存储任何类型的唯一值,无论是原始值还是对象引用。Set存储元素是无序的,不能通过下标访问。Set本身是一个构造函数,用来生成Set数据结构

最常用来进行数组去重·

var arr = [1,2,3,4,3,5,5,3]
var arr2 = [...new Set(arr)] //[1,2,3,4,5]

1.1 Set常用的方法

  1. add()方法用于向set结构中添加值
  2. delete()方法用于从set结构中删除值,返回值为布尔值
  3. has()方法用于判断某一个值是否是set数据结构中的成员
  4. clear()方法用于清空set数据结构中的值

1.2  迭代Set

1. forEach

const set = new Set(['a', 'b', 'c']);
set.forEach(value => {
    console.log(value); // 在控制台中依次打印a, b, c
})

2. for of

  •  keys():返回键名(键名 = 键值)
  • values():返回键值
  • entries():返回键值对

2. Map

Map是一组键值对的结构,和JSON对象类似。key不仅可以是字符串号可以是对象。Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这样就解决了同名键碰撞的问题。

2.1 Map常用的方法

  1. set(key, value)方法: 设置Key所对应的键值,然后返回整个Map结构
  2. get(key)方法: 读取key对应的键值,如果找不到key,返回undefined
  3.  has(key)方法: 返回一个布尔值,表示某个键是否在Map结构中
  4.  delete(key)方法: 删除某个键,返回true,删除失败返回false
  5. clear()方法: 清除所有成员,没有返回值

 2.2 迭代Map

1.for of

  • keys(): 返回键名的遍历器
  • values(): 返回键值的遍历器
  • entries(): 返回所有成员的遍历器

2. forEach 

3. Map和Set的区别

  1. 初始化需要的值不一样,Map需要的是一个二维数组,而Set 需要的是一维 Array 数组
  2. Map 是键值对的存在,值不作为健;而 Set 没有 value 只有 key,value 就是 key;
  3. Map的键是不能修改,但是键对应的值是可以修改的;Set不能通过迭代器来改变Set的值,因为Set的值就是键。
  4. Map 和 Set 都不允许键重复

4. WeakSet

  1. WeakSet 的成员只能是对象,而不能是其他类型的值
  2. WeakSet中的对象都是弱引用,即如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的空间。但在Set中,只要Set实例存在引用,垃圾回收机制就不能释放该对象的内存空间,即Set类型可以看作是一个强引用。
  3. weakSet是不可遍历的,并且没有size属性。其内部有多少个成员取决于垃圾回收机制有没有运行, 运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此es6规定weakSet是不可遍历的。
//Set:外部设置key = null,而Set内部并没有取消引用。
let set = new Set();
let key = {
    value:1
};
set.add(key);
console.log(set.size);// 1
// 取消原始引用
key = null;
console.log(set.size);// 1
// 重新获得原始引用
key = [...set][0];   
console.log(key);// {value: 1}


//WeakSet:外部设置key = null,WeakSet内部的引用也取消
let ws = new WeakSet();
let key = [1, 2];
ws.add(key);
console.log(ws.has(key));// true
key = null;
console.log(ws.has(key));// false

 5.WeakMap

  1. WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。

  2. WeakMap的键名所指向的对象不计入垃圾回收机制。它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此所有引用的对象的其他引用都被清除,垃圾回收站就会释放该对象所占用的内存。

  3. WeakMap没有遍历操作(即没有key()、values()和entries()方法),也没有size属性。

  4. WeakMap无法清空,即不支持clear()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值