JS清理Map缓存核心是delete()删单个键值对、clear()清空全部;前者适合淘汰特定项(如登出删token),后者适合重置状态(如切换用户);误用包括遍历delete、对象式delete、重新赋值Map。

JS 中清理 Map 缓存,核心就两条路:按需删单个键值对用 delete(),彻底清空全部内容用 clear()。两者不冲突,选哪个取决于你要保留数据还是全扔掉。
什么时候用 delete() 删除特定缓存项
适合只淘汰某一项、比如用户退出登录时清除其 token,或某个接口响应过期后删对应 key。
- 调用
map.delete(key),返回true表示删除成功,false表示 key 不存在 - key 可以是任意类型(字符串、数字、对象、函数、NaN),不局限于字符串
- 不会影响其他键值对,也不会改变
map.size以外的状态
什么时候用 clear() 一键清空所有缓存
适合重置状态、切换用户、页面刷新前统一清理,或者调试时快速归零。
- 调用
map.clear()后,Map 立即变为空,map.size === 0 - 时间复杂度是 O(1),比手动遍历 keys 再逐个 delete 高效得多
- 操作是原子性的,中间没有“半清空”状态,避免并发访问时出现意外
别踩坑:delete 和 clear 的常见误用
有些做法看着能用,但效率低、易出错或逻辑不稳:
- 不要用
for...of遍历map.keys()再调delete()—— 多此一举,直接clear()更快更安全 - 不要试图用
delete map[key](像操作普通对象那样)—— Map 不支持这种语法,会静默失败 - 不要依赖
map = new Map()替代clear()—— 如果其他变量还引用着原 Map,旧数据仍在内存里,没真正释放
实际组合使用的例子
比如一个请求缓存 Map,既要支持单条失效,也要支持全局刷新:
-
cache.delete('/api/user/123')—— 某用户信息更新,删旧缓存 -
cache.clear()—— 用户登出,清空所有接口缓存 - 搭配
has()和get()判断是否存在再取值,避免读到已删项


















