五分钟学习ES6数据类型:Map和weakMap
七娃博客48人阅读
ES6在很久之前都推出了Map,weakMap,Set,WeakSet这四种新的数据类型,一直看一遍忘一遍,也没有过多的去深入学习,最近有时间,晚上加班学习一下老知识,再来涨涨见识!
Map数据类型
Map介绍及用法
新增Map属性值,通过关键字set(key,value)进行属性设置,Map的属性key具备唯一性,如果重复,后面的value会把前面的值覆盖!
let aa = new Map() aa.set("a","213123") aa.set("b","21322123") aa.set("c","3123")
属性判断-has
Map属性是否包含某个属性值?可用使用has关键字,返回布尔值。
属性删除-delete
Map属性删除是通过delete关键字,删除指定对象的属性值
// 属性判断 if(aa.has('b')){ // 属性删除 aa.delete('b') }
长度获取-size
Map类型的数据长度,不能用length获取,而是使用size,通过关键字size返回数据长度!
let length = aa.size
获取属性值-get
如何获取指定Map的属性值?有人说可用直接遍历数据,再获取对应的属性值。其实Map提供了一个get方法,可用直接获取指定的属性值。
aa.get('c')
迭代属性
Map数据类型具备迭代器,可用通过keys,values和entries使用Map迭代属性。
let ww = aa.entries() let dd = aa.keys() let ee = aa.values()
转数组
Map数据类型可以通过Array.from转数组,它本身是一种类似数组得数据结构。
let bb = Array.from(aa)
Map遍历,得到的是属性对应的值
Map数据类型可用使用forEach进行遍历,换句话说,Map提供了一个forEach的方法,允许遍历子属性。
if(aa){ aa.forEach(item=>{ console.log(item) }) }
数据类型-Map
既然是一种新得数据类型,那通过Object原型得方法打印一下Map的值,我们看看它最后的值是什么?
console.log(Object.prototype.toString.call(aa)); // [object Map]
很明显,打印的结果是Map,也就是说ES6之后,js的基本数据类型又被扩展了,不单单是原型的基础类型,array,function,object,undefined,null,NaN,现在又要加入Map,WeakMap ,Set,WeakSet这四种。
是否支持序列化
我们知道数组和对象都支持JSON序列化和反序列化,那么Map类型可以序列化嘛?
console.log(JSON.stringify(aa)) // {}
不支持序列化,会得到空对象。
清除数据-clear
Map属性及值的清除,使用clear关键字,将数据全部清除
aa.clear()
WeakMap介绍及用法:
WeakMap用法和方法类似于Map,不过方法没那么多,也没有size属性,WeakMap只有:has,set,get,delete,具体了可以看下面的原型方法对比图,如下:
let wa = new WeakMap() et b = { name:"张三" } wa.set(b,"bb") if(wa.has(b)){ if(wa.get(b) == 'bb'){ wa.delete(b) } }
WeakMap和Map数据类型的区别
1.Map支持任意值作为key值;WeakMap的key值只能是对象!!!
2.Map是引用类型;WeakMap是弱引用,内存会被回收!
3.WeakMap没有size长度属性;没有Map的clear方法,WeakMap是内存很快被收回;WeakMap没有Map的迭代器,不能转成数组结构!
评论功能测试