三 2 map object weakMap

MapObject
意外的键Map默认情况下不包含任何键,只包含显式插入的键Object有一个原型,原型链上的键名有可能和自己在对象上设置的键名冲突
键的类型Map的键可以是任意值Object的键必须是String或Symbol
键的顺序Map中的key是有序的,迭代的时候,Map对象以插入的顺序返回keyObject的键无序
迭代Map 是 iterable 的,所以可以直接被迭代迭代Object需要以某种方式获取它的键然后才能迭代。
SizeMap 的键值对个数可以轻易地通过size 属性获取

Object 的键值对个数只能手动计算

性能在频繁增删键值对的场景下表现更好。在频繁添加和删除键值对的场景下未作出优化。

实际上Map是一个数组,它的每一个数据也都是一个数组,其形式如下

const map = [
     ["name","张三"],
     ["age",18],
]

Map数据结构有以下操作方法:

set(key,value):设置键名key对应的键值value,然后返回整个Map结构,如果key已经有值,则键值会被更新,否则就新生成该键。(因为返回的是当前Map对象,所以可以链式调用

get(key):该方法读取key对应的键值,如果找不到key,返回undefined

size: Map.size()返回Map结构的成员总数

delete(key):该方法删除某个键,返回true,如果删除失败,返回false。

clear():map.clear()清除所有成员,没有返回值。

has(key):该方法返回一个布尔值,表示某个键是否在当前Map对象中。

Map结构原生提供是三个遍历器生成函数和一个遍历方法

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历Map的所有成员。
const map = new Map([
     ["foo",1],
     ["bar",2],
])
for(let key of map.keys()){
    console.log(key);  // foo bar
}
for(let value of map.values()){
     console.log(value); // 1 2
}
for(let items of map.entries()){
    console.log(items);  // ["foo",1]  ["bar",2]
}
map.forEach( (value,key,map) => {
     console.log(key,value); // foo 1    bar 2
})
const map=new Map([
    ["foo",1],
    ["bar",2]
])

 WeakMap 结构与 Map 结构类似,也是用于生成键值对的集合。但是 WeakMap 只接受对象作为键名( null 除外),不接受其他类型的值作为键名。

WeakMap的设计目的在于,有时想在某个对象上面存放一些数据,但是这会形成对于这个对象的引用。一旦不再需要这两个对象,就必须手动删除这个引用,否则垃圾回收机制就不会释放对象占用的内存。

而WeakMap的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值