0

0

简易任务列表(Todo List)_集合动态管理与文件自动保存练习

P粉602998670

P粉602998670

发布时间:2026-02-22 20:19:48

|

231人浏览过

|

来源于php中文网

原创

localstorage只能存字符串,存数组或对象会转成"[object object]";须用json.stringify()存、json.parse()取,并加try/catch防错;动态更新应封装原子操作函数避免竞态;文件下载需blob+createobjecturl,设正确type防乱码;老浏览器需检测localstorage可用性并降级;多标签页需监听storage事件处理冲突。

简易任务列表(todo list)_集合动态管理与文件自动保存练习

为什么 localStorage 不能直接存数组或对象

因为 localStorage 只接受字符串作为值,存任何非字符串类型(比如 []{}null)都会被自动转成 "[object Object]""",取出来就废了。

  • 常见错误现象:localStorage.setItem('todos', [{id:1, text:'buy milk'}]) → 取出是 "[object Object]"
  • 正确做法:存之前必须用 JSON.stringify(),读之后必须用 JSON.parse()
  • 注意 JSON.parse() 对空值或损坏字符串会抛错,建议加 try/catch
  • 示例:
    const todos = [{id:1, text:'buy milk'}];<br>localStorage.setItem('todos', JSON.stringify(todos));<br><br>let saved = localStorage.getItem('todos');<br>const parsed = saved ? JSON.parse(saved) : [];

动态增删 todo 时,如何避免覆盖或丢失数据

每次写入都该基于当前最新状态做操作,而不是“读→改→写”三步手动拼接——尤其在多标签页或快速点击场景下极易出错。

  • 不要这样:const list = getFromStorage(); list.push(newItem); saveToStorage(list);(竞态风险)
  • 推荐封装一个原子操作函数,比如 updateTodos((current) => [...current, newItem])
  • updateTodos 内部统一处理读取、转换、更新、保存,确保单点控制
  • 删除时别用 filter 后全量重写,除非你确认数据量小;大列表可考虑用 ID 索引缓存提升响应

文件自动保存到本地(.json)为什么浏览器不支持直接写磁盘

浏览器出于安全限制,无法像 Node.js 那样调用 fs.writeFile,所谓“自动保存”其实是触发下载,由用户选择路径和确认。

大师兄智慧家政
大师兄智慧家政

58到家打造的AI智能营销工具

下载
  • 核心方法是构造 Blob + URL.createObjectURL + <a download></a> 模拟点击
  • 容易踩的坑:Blob 类型必须显式设为 "application/json;charset=utf-8",否则中文乱码
  • 不要用 location.href = 'data:...' 方案,iOS Safari 不支持长 data URL 下载
  • 示例:
    const blob = new Blob([JSON.stringify(todos, null, 2)], {<br>  type: 'application/json;charset=utf-8'<br>});<br>const url = URL.createObjectURL(blob);<br>const a = document.createElement('a');<br>a.href = url;<br>a.download = 'todos.json';<br>a.click();<br>URL.revokeObjectURL(url);

IE11 或旧版 Safari 下 localStorage 读写失败怎么办

不是所有老浏览器都完整支持 localStorage,更别说 JSON.stringify 对循环引用或 undefined 的处理差异。

  • 先检测可用性:try { localStorage.test = 1; delete localStorage.test; } catch(e) { /* fallback */ }
  • IE11 会把 undefined 序列化成 null,但某些版本对 DateRegExp 直接报错,todo 列表里尽量只存 plain object
  • 兼容方案可降级到 cookie(容量小)或内存暂存 + 提示“请升级浏览器”
  • 真正要长期存且跨设备,别依赖前端存储,得连后端 API

实际用起来最麻烦的不是存和取,而是当用户在 A 标签页添加、B 标签页同时删除时,怎么让两边状态不打架。这问题没银弹,得靠事件监听 storage 事件 + 合理的冲突策略,比如“以最后修改为准”或“提示用户手动合并”。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

444

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

322

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

826

2024.03.01

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6475

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

363

2023.11.23

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号