ES6-Map

Map 是和 object对象类似的一种数据结构

Map 和 Object 区别

  1. object 的键名只能为字符串、数字 或者 symbol;Map 的键名类型更丰富,可以是任意类型的,包括对象等
  2. object 的大小(属性总个数)要通过遍历计算获取;Map 可以直接通过 size 属性获得
  3. object 中查找是否存在某个属性时,需要使用遍历;Map 可以直接使用 has() 检查是否存在
  4. object 有原型,自己定义的属性名可能会与原型链上的属性名重复
  5. 对于频繁的添加、删除属性操作,Map 比 object 的效率更高

Map 的一些操作方法

set()- - -添加属性
get()- - -获取属性值
has()- - -判断是否存在某属性
delete()- - -删除某属性
clear()- - -清除所有属性

示例:
let m = new Map();
let obj = {
    uname: '斑'
}
m.set(obj, '猫咪老师')
console.log(m)
console.log(m.get(obj))
console.log(m.size)


let m2 = new Map([['夏目玲子', 18], ['夏目贵志', 16], ['奈落', '妖怪']])
console.log(m2)
console.log(m2.size)
console.log(m2.has('夏目玲子'))
console.log(m2.has('犬夜叉'))

m2.delete('奈落')
console.log(m2)

m2.clear()
console.log(m2)

打印结果:

image.png

Map 的遍历

遍历可以和对象一样使用:
forEach()、for of、for of + keys()、for of values()+ 、for of + entries()

let m = new Map([['夏目玲子', 18], ['夏目贵志', 16], ['斑', 10000]])
m.forEach(item => console.log(item))
m.forEach((value, key) => console.log(value, key))


for (let i of m) {
    console.log(i)
}

for (let key of m.keys()) {
    console.log(key)
}

for (let value of m.values()) {
    console.log(value)
}

for (let [key, value] of m.entries()) {
    console.log(key, value)
}

打印结果:

image.png

Map 的应用场景

对于可以使用 object 的地方,都可以考虑使用 Map

WeakMap

WeakMap 和 Map 类似,但是 WeakMap 只能存放 引用类型 的属性(如对象、数组、方法),属于弱引用,不能遍历- - -无法使用 forEach()、for of、for of + keys()、for of values()+ 、for of + entries() 遍历属性
没有 size 属性
没有 clear() 方法

存放普通属性会报错,eg:

let m = new WeakMap()
m.set('莉萝')

打印结果:

image.png

存放对象正确:

let m = new WeakMap()
let obj = {
    uname: '史迪仔'
}
m.set(obj, '星际宝贝')
console.log(m)

打印结果:

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值