ES6中Set、Map、WeakSet、WeakMap

8 篇文章 0 订阅
这篇博客介绍了ES6中新增的数据结构Set、WeakSet、Map和WeakMap。Set是唯一值的集合,不允许重复,即使NaN也视为相等。WeakSet仅存储对象且为弱引用,无法遍历。Map是键值对的集合,键可以是任意类型,可以接受数组或对象初始化。WeakMap则限制键必须为对象,键值也是弱引用,同样不支持遍历。这些数据结构为JavaScript开发提供了更丰富的数据管理方式。
摘要由CSDN通过智能技术生成

阮一峰:https://es6.ruanyifeng.com/#docs/set-map

Set

  • ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的没有重复的值。
  • 向 Set 加入值的时候,不会发生类型转换
  • Set 实例添加了两次NaN,但是只会加入一个。这表明,在 Set 内部,两个NaN是相等的。
  • Set 实例添加了两个一样的对象,它们被视为两个值
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set // Set {NaN}

let set = new Set();
set.add({});
set.size // 1

set.add({});
set.size // 2

WeakSet

  • 不重复的值的集合
  • WeakSet 的成员只能是对象,而不能是其他类型的值
  • WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用
  • 不可遍历
const ws = new WeakSet();
ws.add(1)
// TypeError: Invalid value used in weak set
ws.add(Symbol())
// TypeError: invalid value used in weak set

const a = [[1, 2], [3, 4]];
const ws = new WeakSet(a);
// WeakSet {[1, 2], [3, 4]}

const b = [3, 4];
const ws = new WeakSet(b);
// Uncaught TypeError: Invalid value used in weak set(…)
// 数组b的成员不是对象,加入 WeakSet 就会报错

Map

  • ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合
  • 键”不限于字符串各种类型的值(包括对象)都可以当作键
  • Map 也可以接受一个数组或者对象作为参数
  • 对一个键连续赋值两次,后一次的值覆盖前一次的值
  • 如果读取一个未知的键,则返回undefined。
  • 只有对同一个对象的引用Map 结构才将其视为同一个键
const m = new Map();
const o = {p: 'Hello World'};

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false
const items = [
  ['name', '张三'],
  ['title', 'Author']
];

const map = new Map();

items.forEach(
  ([key, value]) => map.set(key, value)
);

WeakMap

  • WeakMap只接受对象作为键名(null除外)。
  • WeakMap的键名所引用的对象都是弱引用(WeakMap 弱引用的只是键名,而不是键值),不计入垃圾回收机制
  • 没有遍历操作(即没有keys()、values()和entries()方法),也没有size属性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值