使用localStorage存储数据时出现list.push is not a function报错是什么原因?
错误原因
- 该报错的核心是调用
push方法的list变量不是数组类型:push是仅数组原型上存在的方法,非数组类型调用该方法就会抛出对应错误。 - 触发当前场景的具体原因:本地localStorage中已经存在名为
DB的存储键,但该键对应的值经JSON.parse解析后不是数组类型。比如之前调试时曾向DB键存入过普通对象、字符串、数字等非数组值,这类值解析后都是真值,无法触发!list的初始化逻辑,代码直接进入else分支调用不存在的push方法导致报错。
修复方案
调整取值后的校验逻辑,不要仅判断list是否为假值,额外增加数组类型校验,只要解析后的值不是数组,就统一重置为空数组,避免之前存入的非法类型干扰逻辑运行。
修正后代码
// 取值后先做类型兜底,非数组直接重置为空数组 let list = JSON.parse(localStorage.getItem('DB')); if (!Array.isArray(list)) { list = []; } // 注意:代码中的number变量需要提前初始化赋值,否则会单独抛出引用错误 const index = number++; list.push({ todo: text, index: index }); localStorage.setItem("DB", JSON.stringify(list)); console.log(list);
内容的提问来源于stack exchange,提问作者sojinLee
相关产品推荐
相关产品推荐

