待办清单删除项刷新后复现,localStorage数组未覆盖问题求助
问题根因
删除逻辑中比较操作出现类型不匹配:
- 从
parent.dataset.todoIndex获取到的索引值是字符串类型 - Todo实例上存储的
index属性是数字类型
你使用严格不等运算符!==进行判断时,会同时校验值和类型,导致过滤条件永远返回true,filter方法没有移除任何数组元素,todoList未发生变化,写入localStorage的内容和删除前完全一致,刷新页面后自然会恢复已删除的待办项。
修复方法
修改删除事件监听中的filter判断逻辑,统一比较的类型即可,推荐使用显式类型转换的写法,避免隐式转换带来的潜在问题:
// 原错误写法 // todoList = todoList.filter((todo) => todo.index !== todoIndex); // 修复后写法 todoList = todoList.filter((todo) => todo.index !== Number(todoIndex));
可选优化
当前代码中你先手动移除了DOM元素再修改数组,其实可以在修改todoList后统一重新渲染全量待办列表,减少手动操作DOM带来的数据视图不一致问题,不过当前问题只需要修改上述比较逻辑即可正常运行。
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

