Map
和Set
是ES6标准新增的数据类型
Map: 是一组键值对的结构,使用一个二维数组来初始化Map,例如:
var m = new Map([['xiaohong',100],['xiaolan',99],['xiaoming',108]]);
或者直接初始化一个空Map:
var m = new Map();
m.set('xiaoli',98);
m.get('xiaoli'); // 98
m.delete('xiaoli');//删除xiaoli这个键值对
m.get('xiaoli'); // undefined
Map结构的key只能对应一个value,如果给一个key多次赋值,那么后面的值会覆盖前面的值。
m.set('xiaolan',88);
m.set('xiaolan',97);
m.get('xiaolan'); // 97
Set: 是一个一维数组初始化的结构,没有value值,只包含key值,例如:
var s = new Set([3,2,1]);
重复元素在Set中自动被过滤掉:
var s = new Set([1,3,5,6,6,'6']);
s; // Set(5) {1, 3, 5, 6, "6"} 整数6和字符串‘6’是不同的值
添加元素到Set中:
var s = new Set();
s.add(18);
s; // Set(1) {18}
Set通过delete(key)的方法删除元素:
s.delete(18);
Object和Map都是键值对,他们的区别是:
1.在Object对象中, 只能把String和Symbol作为key值, 但是在Map中,key值可以是任何基本类型
2.通过Map中的size属性, 可以很方便地获取到Map长度, 要获取Object的长度, 你只能用别的方法了
3.Map对象实例中数据的排序是根据用户push的顺序进行排序的, 而Object实例中key,value的顺序就是有些规律了, (他们会先排数字开头的key值,然后才是字符串开头的key值);
4.Object对象有原型, 也就是说他有默认的key值在对象上面, 除非我们使用Object.create(null)创建一个没有原型的对象
关于 Array 和 Set, 区别就是 Set 不可以有重复元素, 而 Array 可以有