Skip to content

Web Storage API

概述

浏览器提供多种存储机制,各有适用场景。

一、存储类型对比

类型容量生命周期作用域用途
Cookie~4KB可设置同源+路径会话、认证
localStorage~5MB永久同源持久化配置
sessionStorage~5MB标签页同源+标签页临时状态
IndexedDB~无限永久同源大量结构化数据

二、localStorage / sessionStorage

javascript
// 存储
localStorage.setItem('key', 'value');
localStorage.setItem('user', JSON.stringify({ name: 'Vue' }));

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

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

// 遍历
for (let i = 0; i < localStorage.length; i++) {
  const key = localStorage.key(i);
  console.log(key, localStorage.getItem(key));
}

// 监听变化 (跨标签页)
window.addEventListener('storage', (e) => {
  console.log(e.key, e.oldValue, e.newValue, e.url);
});

三、Cookie

javascript
// 设置
document.cookie = 'name=value';
document.cookie = 'name=value; max-age=3600'; // 1小时
document.cookie = 'name=value; path=/; secure; samesite=strict';

// 读取
const cookies = document.cookie; // "name=value; name2=value2"
function getCookie(name) {
  const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
  return match ? match[2] : null;
}

// 删除
document.cookie = 'name=; max-age=0';
属性说明
max-age过期秒数
expires过期时间
path路径
domain域名
secure仅 HTTPS
httpOnly禁止 JS 访问
sameSite跨站限制 (Strict/Lax/None)

四、IndexedDB

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

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

request.onsuccess = (e) => {
  const db = e.target.result;
  
  // 写入
  const tx = db.transaction('users', 'readwrite');
  const store = tx.objectStore('users');
  store.add({ id: 1, name: 'Vue' });
  
  // 读取
  const getTx = db.transaction('users', 'readonly');
  const getStore = getTx.objectStore('users');
  const getReq = getStore.get(1);
  getReq.onsuccess = () => console.log(getReq.result);
};

面试高频题

Q1: localStorage 和 sessionStorage 区别?

localStorage 永久存储,sessionStorage 随标签页关闭而清除。

防止 CSRF 攻击,限制第三方网站携带 Cookie。

Q3: IndexedDB 应用场景?

离线应用、大量数据存储、复杂查询需求。

前端面试知识库