这六种JS本地存储,你知道不?

123 阅读2分钟

JavaScript 提供了多种在客户端存储数据的本地存储方案,以下是主要的几种方式:

1. Cookie

  • 特点:小型文本数据(最多约4KB),一般是为了辨别用户身份,随HTTP请求自动发送到服务器。

API

// 设置
document.cookie = "username=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";

// 读取
const cookies = document.cookie;

// 删除(设置过期时间为过去时间)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

2. localStorage

  • 特点持久化存储(除非手动清除),同源窗口共享,存储大小通常为5-10MB,只能存储字符串

API

// 存储
localStorage.setItem('key', 'value');

// 读取
const value = localStorage.getItem('key');

// 删除
localStorage.removeItem('key');

// 清空
localStorage.clear();

3. sessionStorage

  • 特点:会话级别存储(关闭标签页后清除),存储大小与localStorage相同
  • API:与localStorage相同,只是替换为sessionStorage对象

4. IndexedDB

  • 特点:客户端NoSQL数据库,支持大量结构化数据存储(通常50MB以上,浏览器可能提示用户增加配额)

API(较复杂,以下为基本示例):

// 打开数据库
const request = indexedDB.open('myDatabase', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  // 创建对象存储空间
  const store = db.createObjectStore('customers', { keyPath: 'id' });
  // 创建索引
  store.createIndex('name', 'name', { unique: false });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  // 添加数据
  const transaction = db.transaction(['customers'], 'readwrite');
  const store = transaction.objectStore('customers');
  store.add({ id: 1, name: 'John', email: 'john@example.com' });
};

5. Cache API

  • 特点caches 是浏览器提供的一个全局对象,代表 CacheStorage,它是所有缓存的存储库。通过这个对象,你可以管理和操作不同的缓存。主要用于Service Worker缓存网络请求

API示例:

// 它会尝试打开一个名为 my-cache 的缓存。如果这个缓存已经存在,就直接打开它;
// 如果不存在,就会创建一个新的名为 my-cache 的缓存。
caches.open('my-cache').then(cache => {
  // 会尝试从服务器获取 /index.html 这个资源,并将其添加到 my-cache 缓存中
  cache.add('/index.html');
  cache.add('/style.css');
});

6. File System Access API

  • 特点:访问本地文件系统(较新API,支持有限)

API示例:

async function saveFile() {
  // 用于显示文件保存对话框,让用户选择文件保存的位置和文件名。
  const handle = await window.showSaveFilePicker();
  // 用于创建一个可写流(FileSystemWritableFileStream 对象),
  // 通过这个可写流可以将数据写入到用户选择的文件中
  const writable = await handle.createWritable();
  // 将字符串 Hello World 写入到可写流中,进而写入到用户选择的文件里。
  await writable.write('Hello World');
  // 关闭
  await writable.close();
}

选择建议

  1. 少量简单数据:使用localStorage或sessionStorage
  2. 需要与服务器通信的数据:使用Cookie
  3. 大量结构化数据:使用IndexedDB
  4. 离线应用缓存:使用Cache API
  5. 需要访问真实文件系统:使用File System Access API