JavaScript 的 Map 可作为轻量级内存键值存储,支持任意类型键、插入顺序和内置迭代;封装后可结合 localStorage 实现持久化,并通过遍历支持前缀查询,但无事务、索引和并发控制,不适用于敏感或大数据场景。

JavaScript 的 Map 本身不是数据库,但它可以作为轻量级、内存中的键值对存储方案使用——适合缓存、会话管理、配置映射等场景。它比普通对象更灵活(支持任意类型作键、保持插入顺序、有内置迭代和大小统计),稍加封装就能模拟一个简易“键值数据库”。
用 Map 做基础键值存储
Map 天然支持增删查改,是理想起点:
-
设值:
db.set("user:1001", { id: 1001, name: "张三" }) -
取值:
db.get("user:1001")→ 返回对象或undefined -
删值:
db.delete("user:1001") -
查是否存在:
db.has("user:1001") -
清空:
db.clear()
加一层简单封装,支持 JSON 持久化
纯内存数据会随页面刷新丢失。可配合 localStorage 实现简单持久化:
- 写入时自动
JSON.stringify后存入localStorage - 读取时先尝试从
localStorage恢复,再加载到Map - 注意:只推荐存结构简单、不包含函数/日期/undefined 的数据;复杂类型需额外序列化逻辑
支持前缀查询(类似 Redis 的 keys pattern)
Map 原生不支持模糊匹配,但可遍历键做字符串判断:
- 例如查所有
"user:*"的键:[...db.keys()].filter(key => key.startsWith("user:")) - 再用这些键批量
get获取对应值,组装成数组返回 - 适合小数据量(几百条以内),大数据建议用 IndexedDB 或专用库
注意事项与边界提醒
这不是真正的数据库,别用于敏感或大量数据:
- 无事务、无索引、无并发控制 —— 多个脚本同时操作可能出错
-
键比较基于引用 —— 若用对象作键,两次
{id:1}是不同键,慎用 -
内存占用可见 —— 长期驻留大 Map 可能影响性能,记得适时
delete或clear -
跨 Tab 不共享 ——
localStorage可跨 Tab,但 Map 实例仍是独立的
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











