es6中的set

来源:互联网 发布:数据连接自动打开 编辑:程序博客网 时间:2024/06/10 17:43

Set

Set 是 ES6 新增的有序列表集合,它不会包含重复项。之前我们通常用对象(Object)或者数组(Array)来实现没有重复项的集合。但对象会对 key 进行 toString() 操作,这会导致某些 key 会意外覆盖之前的数据;如果 key 本身是一个对象,toString() 也得不到想要的结果,如下:

JSvar o = {};var key1 = 2;var key2 = { toString : function() { return 2 } };var key3 = { x : 1 };var key4 = { y : 2 };o[key1] = 1;o[key2] = 2;o[key3] = 3;o[key4] = 4;// o : Object {2: 2, [object Object]: 4}

数组可以存放任何类型的数据,不过数据除重需要自己实现。

Set 支持 add(item) 方法,用来向 Set 添加任意类型的元素,如果已经添加过则自动忽略;has(item) 方法用来检测 Set 中是否存在指定元素;delete(item) 方法用来从 Set 中删除指定元素;clear() 用来清空 Set;获取 Set 集合长度用 size 属性。如下:

JSvar set = new Set();set.add(window);set.has(window); // trueset.size; // 1set.add(window);set.add(1);set.size; // 2set.delete(window);set.has(window); // falseset.clear();set.size; // 0

Set 调用 add、has、delete 等方法时对 key 进行的比较,不做类型转换。可以认为使用「===」进行比较,当然也不全是「===」:

  • Set 中,NaN 只能添加一次(虽然NaN === NaN 返回 false);
  • Set 中,「-0」和「0 或 +0」可以同时存在,因为符号不一样(虽然 -0 === 0 或 -0 === +0 返回 true);
0 0
原创粉丝点击