在前端项目中定期清理 localStorage:一个容易被忽视的过期策略
做后台系统时经常把一些不敏感的状态塞进 localStorage,比如展开的菜单、表格列宽、临时筛选条件。时间一长,这些键值越积越多,用户换了设备或者需求变更后,旧数据反而成了脏数据来源。更麻烦的是,有些缓存其实带有时间语义,比如接口返回的城市列表,超过一天就应该失效重新拉取,但 localStorage 本身没有过期机制。手动在每次读取时写 if (Date.now() - savedAt > TTL) 会散落在各处,维护起来很烦。这篇文章从实际场景出发,先讲清 localStorage 无过期的本质,然后给出一个带 TTL 的封装方案,再讨论什么时候该主动清理、如何避免清理时误删其他模块的数据,以及跨标签页场景下的一些细节。最后附上可直接复用的工具函数和迁移旧数据的思路。