IndexedDB是浏览器提供的支持索引、事务和异步操作的本地NoSQL数据库,适用于离线场景下持久化存储大量结构化数据,容量可达几百MB。

IndexedDB 是浏览器提供的本地数据库,适合在离线场景下持久化存储大量结构化数据。它比 localStorage 更强大:支持索引、事务、异步操作、二进制数据(如 Blob),且容量通常达几百 MB(具体取决于浏览器和用户设置)。
IndexedDB 不是传统 SQL 数据库,没有表、SELECT 语句,而是基于对象仓库(object store)、键路径(keyPath)、索引(index)和事务(transaction)的 NoSQL 模式:
以下是一个完整示例,实现一个简单的待办事项(todo)存储:
1. 打开并初始化数据库
立即学习“J*a免费学习笔记(深入)”;

首次打开会触发 onupgradeneeded,此时可建对象仓库和索引:
AI Code Reviewer
AI自动审核代码
112
查看详情
const DB_NAME = 'todoDB';
const DB_VERSION = 1;
const STORE_NAME = 'todos';
let db;
const request = indexedDB.open(DB_NAME, DB_VERSION);
request.onerror = () => console.error('打开数据库失败');
request.onsuccess = (e) => {
db = e.target.result;
};
request.onupgradeneeded = (e) => {
const newDb = e.target.result;
// 创建对象仓库,主键为 id 字段(自动递增)
const store = newDb.createObjectStore(STORE_NAME, { keyPath: 'id', autoIncrement: true });
// 在 title 字段上建索引,方便按标题搜索
store.createIndex('byTitle', 'title', { unique: false });
};
2. 添加一条数据
function addTodo(todo) {
const tx = db.transaction(STORE_NAME, 'readwrite');
const store = tx.objectStore(STORE_NAME);
const req = store.add({ ...todo, createdAt: Date.now() });
req.onsuccess = () => console.log('添加成功');
req.onerror = () => console.error('添加失败');
}
// 调用:addTodo({ title: '买牛奶', done: false });
3. 查询全部或按条件查
// 查全部
function getAllTodos() {
const tx = db.transaction(STORE_NAME, 'readonly');
const store = tx.objectStore(STORE_NAME);
const req = store.getAll();
req.onsuccess = (e) => console.log(e.target.result); // 返回数组
}
// 按 title 精确查找(使用索引)
function findTodoByTitle(title) {
const tx = db.transaction(STORE_NAME, 'readonly');
const store = tx.objectStore(STORE_NAME);
const index = store.index('byTitle');
const req = index.get(title);
req.onsuccess = (e) => console.log(e.target.result);
}
实际开发中容易踩的几个坑,注意绕开:
做 PWA 或离线应用时,常见组合是:网络正常时同步到服务端,断网时写入 IndexedDB,恢复后自动补传:
基本上就这些。IndexedDB 学起来门槛略高,但一旦掌握,离线能力就稳了。不需要追求一步到位,从一个对象仓库开始,边用边补索引和事务逻辑,很快就能上手。
以上就是如何实现离线存储_j*ascript中indexeddb怎么用?的详细内容,更多请关注其它相关文章!
# 高阶
# 番禺做一个网站优化
# 怎么来优化网站推广效果
# 池州网站推广排名
# 辽源seo教程是什么
# 青山seo优化源头厂家
# 便宜网站建设文案模板
# 宜良公司网站建设项目
# 大连seo软件平台
# 马鞍山网站优化怎么做的
# 个人网站论文推广
# 是一个
# 结构化
# javascript
# 如何处理
# 二进制数
# 主键
# 中有
# 多个
# 如何实现
# 离线
# 持久化存储
# app
# 浏览器
# java
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
《书耽》更换手机号方法
大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
PHP utf8_encode 字符编码转换陷阱与解决方案
百度竞价WAP显示PC链接问题
抖音团长模式怎么做?团长模式是什么意思?
《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊
拷贝漫画2025网页版入口 拷贝漫画官网免费看全集
Apple Music无故扣费引质疑
WooCommerce 新客户订单自动添加管理员备注教程
《东方财富》条件单关闭方法
济南公交卡手机充值指南
如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?
微信如何设置字体大小_微信字体设置的阅读舒适
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
《顺丰同城骑士》查看我的技能方法
TikTok视频播放不流畅怎么办 TikTok视频播放优化方法
C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析
VS Code源代码管理(SCM)视图的进阶使用技巧
获取WooCommerce产品在后台编辑页面的分类ID
Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】
百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析
123平台官方登录入口 123邮箱网页端在线沟通工具
《火花chat》搜索好友方法
sf漫画官网登录入口直达_sf漫画官方正版网址
视频号视频怎么免费保存到相册?保存到相册需要注意什么?
firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接
处理含命名空间的XML文件 Power Query中的高级技巧
Win10输入法不见了怎么办 Win10找回语言栏图标教程
深入理解Python对象引用与链表属性赋值
荣耀Magic6 Pro拍照成像偏暗_荣耀Magic6 Pro夜景优化
喜茶GO更换登录账号方法
大众点评了却看不到是怎么回事
c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践
谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程
Yandex浏览器官方入口_Yandex搜索引擎中文版
Dagster资产间数据传递与用户配置管理教程
中大网校app做题记录清除方法
管理打开的编辑器:固定、分组和关闭技巧
火狐浏览器如何刷新修复浏览器 火狐浏览器“重置Firefox”功能详解
苹果手机聊天记录删除了如何恢复
宝妈做视频号该写什么标签话题?宝妈关注的话题有哪些?
顺丰快递收费标准查询_如何查看顺丰最新收费价格
TikTok网页版入口快速访问 TikTok官网账号登录方法
德邦快递查询入口登录官网 德邦快递单号查询系统入口
Django模型动态关联检查:高效管理复杂关系
《美篇》取消会员自动续费方法
构建可配置的J*aScript加权点击计数器与共享总计功能
火柴人战争网页版在线玩
更换小红书群背景怎么换?小红书群规则怎么设置?
2025-12-16
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。