保存到localStorage报SyntaxError: Unexpected token u in JSON at position 0
报错原因
- 错误
SyntaxError: Unexpected token u in JSON at position 0的本质是JSON.parse()接收到的入参为undefined:undefined转为字符串后首字符为u,不符合JSON格式要求,触发解析失败。 - 定位到
addNewPlace方法内的代码:this.placeList=(JSON.parse(localStorage["storedData"]));这里直接读取原生localStorage的storedData字段,没有添加兜底逻辑。当浏览器localStorage中不存在该字段时,返回值为undefined,直接传入JSON.parse就会抛出该错误。 - 你在初始化
placeList时已经做了localStorage["storedData"] || '[]'的兜底处理,但新增地点的方法里遗漏了该逻辑,新用户/清除过浏览器缓存的用户首次操作就会触发问题。
解决方案
直接修复(立即生效)
修改addNewPlace方法中的解析逻辑,添加和初始化一致的兜底规则:
// 修改前 this.placeList=(JSON.parse(localStorage["storedData"])); // 修改后 this.placeList = JSON.parse(localStorage["storedData"] || '[]');
优化建议(避免后续同类问题)
- 统一使用你已经注入的
LocalStorageService做存储读写,不要混用原生localStorage操作,避免逻辑不一致。可以调整为:
this.placeList = this.localStorageAs.get("storedData") || [];
- 可以额外添加数组类型校验,防止极端情况push报错:
if (!Array.isArray(this.placeList)) { this.placeList = []; }
内容的提问来源于stack exchange,提问作者Henri
相关产品推荐
相关产品推荐

