优雅回退需捕获JSON解析异常、提供语义化默认值、区分未初始化与数据损坏、清理脏数据并封装安全读写工具。

当 localStorage 中的数据格式损坏(比如 JSON 解析失败),直接报错或中断逻辑会影响用户体验。优雅回退的关键是:**捕获解析异常、提供默认值、避免静默失败、必要时清理脏数据**。
用 try-catch 包裹 JSON.parse
这是最基础也最关键的一步。localStorage.getItem() 返回的是字符串,但可能为空、被篡改、或非 JSON 格式(如旧版本存的原始字符串、undefined 被转成 `"undefined"`)。
- 永远不要假设 getItem() 的返回值可直接 JSON.parse
- 在解析前做空值检查,再包裹 try-catch
- 捕获 SyntaxError 后,不抛出错误,而是走降级逻辑
提供语义化默认值并区分“未初始化”和“解析失败”
不能一律用 {} 或 [] 代替——这会让业务逻辑难以判断是首次使用,还是数据已损坏。
- 为不同用途的 key 设计专属默认值(如用户设置用
{ theme: 'light', lang: 'zh' },列表数据用[]) - 可额外写一个标记字段(如
__version: 1)辅助校验结构完整性 - 若解析失败,可记录一次日志(console.warn)或上报监控,但不影响主流程
自动清理无效数据,防止下次继续失败
保留损坏的字符串没有意义,反而会导致每次访问都重复报错。
批量分析录音转写,输出多维度拓客报告。触发词:录音分析、总结、音频总结、拜访记录总结。当用户提及「分析录音」「看看录音数据」「最近的录音」「通话记录」且意图为批量统计/分析时触发。仅出现「录音」或「拜访」时需结合上下文,若仅查看单条详情则不触发。
立即学习“Java免费学习笔记(深入)”;
- 在 catch 块中调用
localStorage.removeItem(key)清除坏数据 - 如果业务允许,也可 fallback 后重新 setItem 默认值(相当于“重置”该配置)
- 注意:不要在页面加载初期集中清理所有 key,应按需、逐 key 处理
封装成可复用的安全读写工具
把上述逻辑收敛成函数,避免各处重复写 try-catch。
const safeLocalStorage = {
get(key, defaultValue = null) {
const raw = localStorage.getItem(key);
if (raw == null) return defaultValue;
try {
return JSON.parse(raw);
} catch (e) {
console.warn(`[LS] Parse failed for key "${key}":`, e);
localStorage.removeItem(key);
return defaultValue;
}
},
set(key, value) {
try {
localStorage.setItem(key, JSON.stringify(value));
} catch (e) {
console.warn(`[LS] Set failed for key "${key}":`, e);
// 可选:触发降级存储(如 sessionStorage 或内存缓存)
}
}
};
使用时:const userPrefs = safeLocalStorage.get('user-settings', { theme: 'light' });

















