IndexedDB 支持多种数据存储类型,允许开发者存储复杂的数据结构。以下是一些常见的数据存储类型和它们的特点:
1. 基本数据类型
这些是 JavaScript 中的基本类型,可以直接存储到 IndexedDB 中:
- Number: 存储数字。
- String: 存储字符串。
- Boolean: 存储布尔值(
true
或false
)。 - Date: 存储日期对象,在存储时会被转化为时间戳。
2. 对象
IndexedDB 最常用的存储类型是对象。可以将任何 JavaScript 对象存储到 IndexedDB 中。这些对象可以是:
- 简单对象: 例如
{ id: 1, name: 'John Doe' }
。 - 嵌套对象: 对象中包含其他对象,例如
{ id: 1, name: 'John Doe', address: { city: 'New York', zip: '10001' } }
。
3. 数组
IndexedDB 允许存储数组格式的数据。数组可以包含基本数据类型或对象。
const data = {
id: 1,
names: ['John', 'Jane', 'Doe']
};
4. Blob
Blob(Binary Large Object)是一种用于存储二进制数据的类型,适用于存储图像、音频、视频文件等。可以用 File
或 Blob
对象实例。
const imageBlob = new Blob([imageData], {
type: 'image/png' });
5. ArrayBuffer 和 Typed Arrays
ArrayBuffer 用于表示通用的、固定长度的二进制数据缓冲区。Typed Arrays(如 Uint8Array
、Float32Array
等)可以用于强类型的二进制数据存储。
const buffer = new ArrayBuffer(16);
const view = new Uint8Array(buffer);
6. 结构化克隆
IndexedDB 使用了结构化克隆算法,可以存储更复杂的对象,包括循环引用和其他特殊类型(如 Map
和 Set
)。这使得开发者可以存储更复杂的数据结构。
const myMap = new Map();
myMap.set('key1', 'value1');
// 结构化克隆可以存储 Map 对象
const dataToStore = {
myMap: myMap
};
7. JSON
虽然 IndexedDB 中不能直接存储 JSON 字符串,但你可以将对象转换为 JSON 字符串,然后存储它们,反之亦然。虽然这样做是可行的,但建议直接存储对象以利用对象的特性。
const jsonString = JSON.stringify({
id: 1, name: 'John Doe' });
8. 非序列化的数据
IndexedDB 不支持直接存储一些复杂类型(如函数、DOM 节点等)。在存储这些类型的对象时,需要先转换为可序列化的数据格式。
总结
IndexedDB 支持多种数据存储类型,能够满足不同应用的需求。在实际应用中,通常会结合使用以上数据类型,以实现复杂的数据存储和管理功能。在选择数据类型时,开发者应注意数据的结构和存取方式,以确保最佳的性能和使用体验。