IndexedDB 是浏览器端最强大、适合结构化数据存储的持久化方案,支持事务、索引与大量异步数据操作。需通过 indexedDB.open() 创建/打开数据库,在 upgradeneeded 中建对象仓库和索引;CRUD 操作须在事务中进行,推荐用 Promise 封装提升可读性;可 close() 关闭或 deleteDatabase() 删除数据库。

J*aScript 中实现数据持久化,IndexedDB 是浏览器端最强大、最适合结构化数据存储的方案。它支持事务、索引、大量数据(通常几百 MB 甚至更多,取决于浏览器和磁盘空间),且是异步 API,不会阻塞主线程。
使用 indexedDB.open() 打开或新建数据库。首次调用会触发 upgradeneeded 事件,必须在此事件中创建对象仓库(Object Store)和索引。
示例:
const request = indexedDB.open('myAppDB', 2); // 版本号为 2
request.onerror = () => console.error('打开失败:', request.error);
request.onsuccess = () => {
const db = request.result;
console.log('数据库已就绪');
};
request.onupgradeneeded = (event) => {
const db = event.target.result;
// 如果版本从 1 升到 2,可新增对象仓库或添加索引
if (!db.objectStoreNames.contains('users')) {
const store = db.createObjectStore('users', { keyPath: 'id', autoIncrement: true });
store.createIndex('byEmail', 'email', { unique: true });
}
};
所有操作需在事务(IDBTransaction)中进行。事务自动提交,无需手动 commit;但若未发生错误,事务会在所有请求完成时隐式提交。
立即学习“J*a免费学习笔记(深入)”;
add()(主键冲突报错)或 put()(覆盖写入)get(key) 或 getKey(key)
index.get(value),如 usersIndex.get('user@example.com')
openCursor() 或 getAll()(注意:后者不支持过滤,仅限现代浏览器)delete(key)
示例(添加用户):
MacsMind
电商AI超级智能客服
192
查看详情
function addUser(db, userData) {
const tx = db.transaction('users', 'readwrite');
const store = tx.objectStore('users');
const request = store.add(userData);
request.onsuccess = () => console.log('用户已保存');
request.onerror = () => console.error('保存失败:', re
quest.error);
}
IndexedDB 全部基于事件回调(也可用 Promise 封装)。务必监听 error 和 abort 事件,尤其在事务中——事务内任意请求出错,整个事务会自动中止(abort)。
推荐封装成 Promise 工具函数提升可读性,例如:
function promisifyRequest(request) {
return new Promise((resolve, reject) => {
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
// 使用示例
async function getUserById(db, id) {
const tx = db.transaction('users', 'readonly');
const store = tx.objectStore('users');
return await promisifyRequest(store.get(id));
}
页面关闭前可调用 db.close() 主动释放连接(非必须,但有助于资源管理)。删除整个数据库用 indexedDB.deleteDatabase('dbName'),同样会触发 blocked 事件(如有其他标签页正打开该库)。
注意:deleteDatabase 是异步操作,需监听 success 和 error。
以上就是j*ascript如何实现数据持久化_IndexedDB怎样操作的详细内容,更多请关注其它相关文章!
# 数据存储
# 百度网站优化费用情况
# 淘宝新手seo
# 莱山区集团网站建设公司
# 明光市网站推广
# 马鞍山网站建设信息
# 本溪seo公司方案
# 宠物猫网站建设文案
# 魔力盒网站建设文案
# 营销中心开放前推广方案
# 网站排名推广案例
# 在此
# 首次
# 加载
# javascript
# 结构化
# 如何用
# 有何
# 使用它
# 递归
# 如何实现
# 浏览器端
# ai
# 工具
# app
# 浏览器
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析
CSS如何控制元素外边距_margin实现布局间隔
猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程
极兔快递官网查询入口手机版 手机极兔快递登录查询入口官方
顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南
谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录
如何在CSS中实现盒模型多列间距_grid-gap与padding结合
Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
抖音视频如何添加标题?添加标题有哪些好处?
Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例
如何使用 Optional 类型并满足 Pylint 的类型检查
什么是Satis,如何用它搭建一个私有的composer仓库?
Bootstrap 5导航栏折叠功能失效:数据属性迁移指南
小红书如何引流到私信?引流到私信有用吗?
苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤
CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条
163邮箱在线登录 163邮箱网页版在线入口
苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】
中通快递官网指定查询 中通快递单号查询平台入口
如何在mysql中比较InnoDB和MyISAM区别
多闪电脑版下载_多闪PC端模拟器使用
抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?
J*aScript类型数组_TypedArray使用
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
《偃武》甘宁技能详解
告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名
HTML与J*aScript实现下拉菜单驱动的动态表格:构建交互式维修表单
Win11如何分屏操作_Win11多窗口分屏技巧
VS Code的时间线(Timeline)视图:您的代码时光机
怎么恢复删除的电脑文件_数据恢复软件使用教程
豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】
解决PHP MySQL数据库更新无响应:SQL查询语法错误解析
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
使用Selenium在无头Chrome中交互动态菜单和复选框的策略
PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角
vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法
家里的小飞虫总是不断,用什么方法可以彻底根除?
汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口
喜茶GO更换登录账号方法
天堂漫画网页版在线阅读 天堂漫画手机版入口
在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享
Animex动漫社社登录官网 Animex动漫社资源社入口直达
跨语言测试实践:使用Python Selenium测试现有J*a Web项目
PPT智能排版生成入口 免费PPT内容自动生成平台
《领英》查看屏蔽名单方法
冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤
oppo手机如何通过下拉通知栏截图_oppo手机通知栏快捷截图方法
京东快递包裹信息查询入口 京东快递官方查询平台入口
西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法
2025-12-20
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。