Map 和 Set:各解决什么问题

48 阅读1分钟

在 ES6 之前,JavaScript 中只有数组和对象,并没有字典这种数据结构。在 ES6 之后才引进了 Map 和 Set 的概念。 JavaScript 中的 Map 就是字典的结构,它里面包含的就是键值对。那你可能会问,它和对象有什么区别?我们说过对象就是一个可以用来实现字典的支持键值对的散列表。Map 和对象最大的区别就是 Map 里的键可以是字符串以外的其它数据结构,比如对象也可以是一个键名。 JavaScript 中的 Set 就是集合的结构,它里面包含值,没有键。那这种结构和数组有什么区别?它的区别主要在于 JS 中的集合属于无序集合,并且里面不能有相同的元素。 JavaScript 同时还提供了 WeakMap 或 WeakSet,用它们主要有 2 个原因。第一,它们都是弱类型,代表没有键的强引用。所以 JavaScript 在垃圾回收时可以清理掉整条记录。第二个原因,也是它的特点,在于既然 WeakMap 里没有键值的迭代,只能通过钥匙才能取到相关的值,所以保证了内部的封装私有属性。

此文章为10月Day028学习笔记,内容来源于极客时间《重学前端》,强烈推荐该课程