讲师中心 微信公众号
AI工具推荐 视频效率加速

控制台通讯录小程序_对象序列化存储与增删改查逻辑实战

冬瑶姑娘_1528

冬瑶姑娘_1528

发布时间:2026-03-12 12:37:03

|

583人浏览过

|

来源于php中文网

原创

JSON.stringify()存对象后读出是字符串,因localStorage只支持字符串存储且读取时未用JSON.parse()还原;新增联系人须用crypto.randomUUID()生成唯一ID并检查重复;删除或修改后需及时存回localStorage并确保视图同步更新。

控制台通讯录小程序_对象序列化存储与增删改查逻辑实战

为什么 JSON.stringify() 存对象后读出来是字符串而不是对象

因为 localStorage 只支持字符串存储,JSON.stringify() 把对象转成字符串存进去了,但读取时没用 JSON.parse() 还原,直接当字符串用了——这是最常卡住的一步。

  • 存的时候必须:localStorage.setItem('contacts', JSON.stringify(contactsArray))
  • 读的时候必须:const contacts = JSON.parse(localStorage.getItem('contacts') || '[]')(注意加空数组兜底,否则 getItem 返回 null 会导致 JSON.parse(null) 报错)
  • 如果忘记 JSON.parse,后续调用 contacts.push 就会报 TypeError: contacts.push is not a function
  • 别用 toString() 或强制类型转换代替 JSON.parse,那只会得到 [object Object]

新增联系人时如何避免重复 ID 冲突

ID 不该靠用户输,也不该用 Date.now() 简单拼接——高并发或快速连点下可能撞车;更不能用数组索引当 ID,删过人之后索引就乱了。

  • 推荐用 crypto.randomUUID()(现代浏览器):id: crypto.randomUUID(),唯一性有保障
  • 兼容旧环境可改用时间戳 + 随机数:id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
  • 存之前先检查是否已存在同 ID:contacts.some(c => c.id === newContact.id),虽然概率极低,但写上不费事
  • 别把 ID 存成数字类型(比如 123),JSON.stringify 后再 parse 会保持为数字,但和字符串 ID 混用容易引发 === 判等失败

localStorage 里删联系人后数组长度对不上怎么办

常见错误是用 splice 或 filter 处理完没重新存回 localStorage,或者存了但读取逻辑没同步更新——看起来“删了”,其实只是内存里删了,下次刷新又回来。

  • 删完必须立刻存:localStorage.setItem('contacts', JSON.stringify(updatedContacts))
  • 别在删除函数里只操作局部变量,要确保操作的是从 localStorage 读出并解析后的那个数组引用
  • 如果用 filter,记得赋值给新变量或原地替换:contacts = contacts.filter(c => c.id !== id),再存
  • 调试时可在控制台手动执行 JSON.parse(localStorage.getItem('contacts')) 确认内容是否真实更新

修改联系人姓名/电话后页面没变,但 localStorage 里数据却变了

这是典型的「状态没驱动视图更新」问题:你改了数组里某个对象的属性,但 Vue/React 没监听到深层变化,或者你用的是纯 JS 手动渲染,但 DOM 更新逻辑漏掉了对应节点。

  • 纯 JS 场景下,改完数据后必须显式重绘列表:renderContacts(contacts),不能只改数组
  • 如果用 contacts.find(c => c.id === id).name = newName,记得之后调用 localStorage.setItem,否则改的只是内存副本
  • 避免直接改对象属性后不触发重新渲染——比如用 Object.assign 或展开运算符生成新对象更安全:contacts = contacts.map(c => c.id === id ? { ...c, name: newName } : c)
  • 注意 localStorage 的 5MB 上限,单个联系人字段别塞大段富文本或 base64 图片,否则存到一半静默失败

真正麻烦的不是序列化本身,而是每次读写都得在字符串和对象之间来回跳,稍一漏掉 parse 或 stringify,整个链路就断在看不见的地方。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

11937

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

9022

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

7732

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1264

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1008

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1516

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

3129

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

20371

2023.08.03

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn