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 为空,这些方法会返回空数组或空对象
相关推荐
程序员黑豆10 分钟前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC42 分钟前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea1 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望1 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少2 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0072 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis3 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝4 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师4 小时前
新兴多智能体系统的模式与问题
前端
用户059540174465 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css