阅读 110

ES6中键值对的集合

Set 集合

Set 集合是什么

Set 对象是值的集合,可以按照插入的顺序迭代它的元素。Set 集合中的元素只会出现一次,即 Set 集合中的元素是唯一的。

const set = new Set([1,2,3,4,5]);复制代码

NaN 和 undefined 都可以被存储在 Set 集合中,NaN 之间被视为相同的值。

const set = new Set([NaN, NaN]);
console.log(set);// Set {NaN}复制代码

对象被存储在 Set 集合中时,两个对象总是不相等的。

const set = new Set([{},{}]);
console.log(set);// Set {{},{}}复制代码

Set 集合的属性与方法

Set 对象提供了size属性用于返回Set 对象的值的个数。

Set 对象提供了用于操作Set 集合的方法,如下表所示:

5oxrrR.png

Set 对象提供了用于遍历 Set 集合的方法,如下表所示:

5oxhxH.png

Set 集合与 Array 对比

一般情况下,在 JavaScript 中使用数组来存储一组元素,而新的集合对象有这些优势:

  • 数组中用于判断元素是否存在的 indexOf() 函数效率低下。

  • Set 对象允许根据值删除元素,而数组中必须使用基于下标的 splice() 方法。

  • 数组的 indexOf() 方法无法找到 NaN 值。

  • Set 对象存储不重复的值,所以不需要手动处理包含重复值的情况。

WeakSet 集合

WeakSet 是什么

WeakSet 对象是一些对象值的集合,并且其中的每个对象值都只能出现一次。

WeakSet 对象与 Set 对象的区别主要有两点:

  • WeakSet 对象中只能存放对象引用,不能存放值。而 Set 对象都可以。

  • WeakSet 对象中存储的对象值都是被弱引用的。如果没有其他的变量或属性引用这个对象值,则这个对象值会被当成垃圾回收掉。正因为这样,WeakSet 对象是无法被枚举的,没有办法拿到 WeakSet 集合包含的所有元素。

var ws = new WeakSet();
var obj={};
var foo ={};
ws.add(obj);
ws.add(foo);复制代码

Map 集合

Map 集合是什么

Map 集合是键值对的集合。任何值都可以作为Map 集合中的键或值。Map 集合可以按照插入的顺序迭代它的元素。

var myMap = new Map();

var keyObj= {},
keyFunc = function (){},
keyString = "a string";

//添加键
mvMap.set(keyString,"和键'a string'关联的值");
mvMap.set(keyObj,"和键keyObj关联的值");
mvMap.set(keyFunc,"和键keyFunc关联的值");复制代码

Map 集合的属性与方法

Map 对象提供了size 属性用于返回 Map 对象的键值对的个数。

Map 对象提供了用于操作 Map 集合的方法和用于遍历 Map 集合的方法,如下表所示:

ryAnKK.png

Map 集合键的相等

Map 集合的键的比较是基于 “SameValueZero” 算法:

  • 判断使用与== =相似的规则。

  • -0 和 +0 相等。

  • NaN与自身相等(与===有所不同)。

Map 集合与 Object 对比

一般情况下,Object 会被用于将字符串类型映射到数值。Object 允许设置键值对、根据键获取值、删除键、检测某个键是否存在。而 Map 具有更多的优势:

  • Object 的键均为 String 类型,在 Map 里键可以是任意类型。

  • 必须手动计算 Object 的尺寸,但是可以很容易地获取使用 Map 的尺寸。

  • Map 的遍历遵循元素的插入顺序。

  • Object 有原型,所以映射中有一些缺省的键。

WeakMap 集合是什么

WeakMap 对象也是键值对的集合。它的键必须是对象类型,值可以是任意类型。它的键被弱保持,也就是说,当其键所指对象没有其他地方引用的时候,它会被回收掉。WeakMap 提供的接口与 Map 相同。

与 Map 对象不同的是,WeakMap 的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。

// WeakMap可以使用set()方法添加成员
const wm1 = new WeakMap();
const key = {foo: 1};
wm1.set(key, 2);

// WeakMap也可以接受一个数组,作为构造函数的参数
const k1 =[1,2,3];
const k2 =[4,5,6];
const wm2 = new WeakMap([[k1, 'foo'],[k2, 'bar']]);复制代码

WeakMap 集合的方法

WeakMap 对象提供了用于操作 WeakMap 集合的方法,如下表所示:

5oxDM9.png


作者:吾覭
链接:https://juejin.cn/post/7023367367271022606


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐