Map
a.set/get/has/delete/clear/size
带键值对的集合【【 ,】【 ,】【 ,】】
键可以是任何类型(使用对象作为键是 Map 最值得注意和重要的功能之一)
Set
b.add/has/delete/clear/size
不重复‘值’的集合【 , , ,】
注意
1.a[键] 会被当做普通对象
2.可‘链式’调用
3.for…of / forEach
4.a/b.keys/.value/.entries
5.有序
相关创建
1.空的 let a = new Map( );
2.初始化创建 [ [ , ] ,[ , ] ,[ , ] ]
3.(Map-a<=普通对象-obj) let a = new Map ( Object.entries (obj) ) ;
4.(普通对象-obj<=Map-a) let obj= Object.fromEntries ( a ) ;
WeakMap
键必须是对象;
不阻止垃圾回收机制 “ 对作为键的对象(key object)” 的回收。
不支持迭代、不支持 keys(),values() , entries() ,所以无法获取 WeakMap 的所有键或值。
支持 get(key) / set(key, value) / delete(key) / has(key)
WeakMap应用
1.额外数据的存储:想存储一些与某对象相关的数据,那么这些数据就应与该对象共存亡
2.缓存
WeakSet
只能添加对象(不能是原始值)。
对象只有在其它某个(些)地方能被访问的时候,才能留在 set 中。
不支持迭代、不支持 keys(),values() , entries() 。
支持 add,has 和 delete 方法。
WeakSet应用
1.针对额外数据 “是/否” 的事实
总结
WeakMap 和 WeakSet 被用作 “主要 ” 对象存储之外的 “辅助 ” 数据结构,最明显的局限性就是不能迭代,并且无法获取所有当前内容。那样可能会造成不便,但是并不会阻止 WeakMap / WeakSet 完成其主要工作 — 成为在其它地方管理/存储“额外”的对象数据。
JS中的Map&Set
最新推荐文章于 2024-08-22 14:32:34 发布