JavaScript在ES6 中的 Set、Map

来源:互联网 发布:程序员杂志 下载 编辑:程序博客网 时间:2024/06/05 17:02

ES6 新增了几种集合类型,简单介绍 Set、Map着两个类型,比较新的 Firefox、Chrome(需要在 about:flags 启用实验性 JavaScript)以及 IE11 都有不同程度的实现。

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

Set在需要在严格模式进行;

//sort排序var b=[1,9,2,3,4,4,7,7,8];var c=b.sort();console.log(c); //[ 1, 2, 3, 4, 4, 7, 7, 8, 9 ]//Set去重var a=new Set(b);console.log(a);//Set { 1, 2, 3, 4, 7, 8, 9 }

var 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 属性。
var 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);


JavaScript的默认对象表示方式{}可以视为其他语言中的MapDictionary的数据结构,即一组键值对。但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。为了解决这个问题,最新的ES6规范引入了新的数据类型Map

Map 是 ES6 新增的有序键值对集合。键值对的 key 和 value 都可以是任何类型的元素。通过 set(key, value) 方法为 Map 设置新的键值对,如果设置的 key 已经存在则用新的 value 覆盖,Map 在比较 key 时也不做类型转换,跟 Set 类似;Map 的 get(key) 方法用来获取指定 key 的值;Map 的 has(key) 、 delete(key) 、clear() 这些方法和 size 属性,与 Set 类似。

Map在需要在严格模式进行;

"use strict";// map是一组键值对的结构,具有极快的查找速度var map=new Map([['张飞',90],['王超',20],['文俊',59]]);console.log(map.get('张飞')); //90






0 0
原创粉丝点击