localStorage使用不止于getItem、setItem、removeItem

今天我们来聊聊js内置对象localStorage的使用,我们平时一般都是getItemsetItemremoveItem,很少接触其他的。

javascript 复制代码
localStorage.getItem('info')
localStorage.setItem('info', '123')
localStorage.remoItem('info')

某天,突然有个小需求,需要我们清除local中所有以user_开头的数据,怎么办呢?显然光用getItemremoveItem是无法实现的。

那么,我们先来学习几个获取 localStorage 中所有缓存的 key的方法:

方法一:使用 for 循环

javascript 复制代码
function getAllLocalStorageKeys() {
  const keys = []
  for (let i = 0; i < localStorage.length; i++) {
    const key = localStorage.key(i)
    keys.push(key)
  }
  return keys
}

// 使用
const allKeys = getAllLocalStorageKeys()
console.log(allKeys)

方法二:使用扩展运算符和 map

javascript 复制代码
const keys = [...Array(localStorage.length)].map((_, i) => localStorage.key(i))
console.log(keys)

方法三:获取键值对

如果你想同时获取键和对应的值:

javascript 复制代码
function getAllLocalStorageItems() {
  const items = {}
  for (let i = 0; i < localStorage.length; i++) {
    const key = localStorage.key(i)
    const value = localStorage.getItem(key)
    items[key] = value
  }
  return items
}

// 使用
const allItems = getAllLocalStorageItems()
console.log(allItems)

方法四:使用 Object.keys 的替代方法

javascript 复制代码
const keys = Object.keys(localStorage)
console.log(keys)  // 这会返回所有 localStorage 的 key

方法五:封装成实用函数

javascript 复制代码
class LocalStorageHelper {
  static getAllKeys() {
    return Object.keys(localStorage)
  }
  
  static getAllItems() {
    return Object.keys(localStorage).reduce((obj, key) => {
      obj[key] = localStorage.getItem(key)
      return obj
    }, {})
  }
  
  static getKeysByPrefix(prefix) {
    return Object.keys(localStorage).filter(key => key.startsWith(prefix))
  }
}

// 使用
const allKeys = LocalStorageHelper.getAllKeys()
const allItems = LocalStorageHelper.getAllItems()

示例:统计存储情况

javascript 复制代码
function analyzeLocalStorage() {
  const keys = Object.keys(localStorage)
  const totalSize = keys.reduce((total, key) => {
    return total + (localStorage.getItem(key).length || 0)
  }, 0)
  
  console.log(`总条目数: ${keys.length}`)
  console.log(`总大小: ${totalSize} 字符`)
  console.log(`所有键名:`, keys)
  
  return {
    count: keys.length,
    totalSize: totalSize,
    keys: keys
  }
}

analyzeLocalStorage()

推荐使用 方法一方法四,它们简单直接且兼容性好。

知道了这些方法后,清除local中所有以user_开头的数据这个需求就很简单了。

javascript 复制代码
	Object.keys(localStorage).forEach(key => {
		if (key.startsWith('user_')) {
       localStorage.removeItem(key)
     }	
	})

最后,localStorage相关限制,我相信大家肯定也是了解的:

  1. 同源策略:localStorage 受同源策略限制,只能访问当前域名下的存储
  2. 数据类型:获取的 key 都是字符串类型
  3. 存储限制:每个域名的 localStorage 通常有 5MB 左右的存储限制
  4. 空值处理:如果 localStorage 为空,这些方法会返回空数组或空对象
相关推荐
于慨19 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz19 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
从前慢丶19 小时前
前端交互规范(Web 端)
前端
@yanyu66619 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
CHU72903519 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序
GISer_Jing19 小时前
Page-agent MCP结构
前端·人工智能
王霸天20 小时前
💥别再抄网上的Scale缩放代码了!50行源码教你写一个永不翻车的大屏适配
前端·vue.js·数据可视化
小领航20 小时前
用 Three.js + Vue 3 打造炫酷的 3D 行政地图可视化组件
前端·github
@大迁世界20 小时前
2026年React大洗牌:React Hooks 将迎来重大升级
前端·javascript·react.js·前端框架·ecmascript
PieroPc20 小时前
一个功能强大的 Web 端标签设计和打印工具,支持服务器端直接打印到局域网打印机。Fastapi + html
前端·html·fastapi