2024-10-10 js 深拷贝常用方法
1、json序列化以及反序列化
let a = JSON.parse(JSON.stringify(b))
2、使用lodash库插件
没有的话先安装:
npm i lodash
使用方式:
import { cloneDeep } from 'lodash';
let a = cloneDeep(b);
ps: 我当前使用的版本是@4
为什么要使用深拷贝?因为我们在开发中会经常进行赋值运算,在你需要赋值又不想污染源数据的时候就需要重新赋值,
一开始我们以为let a = b;就能够把b的值拿过来,实际上分两种情况,如果b是原始数据类型,比如Boolean、Number、String之类的值完全可以拷贝,
而对于引用数据类型,比如object、array、function等,let a = b的写法仅会拷贝的它们的引用地址,而不会拷贝内容本身,这种情况就叫浅拷贝,
当你修改了a的值,b的值也会随之被修改,如:
let b = {
name: '123',
status: false
};
let a = b;
a.name = '456';
console.log(b.name); // 456
console.log(a.name); // 456
或者:
let b = ['1'];
let a = b;
a[0] = '45121216';
console.log(b[0]); // 45121216
console.log(a[0]); // 45121216
这个时候就需要使用深拷贝方式,json序列化以及反序列化和lodash库是比较常用且简单的方式,复杂一点可以使用递归方式处理等,
注意:[...b]和{...b}都属于浅拷贝方式,好了,快点检查你的代码是否存在这种不符合期望的写法吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2023-10-10 2023-10-10 {"errcode":40125,"errmsg":"invalid appsecret, rid: 65124e717-5e04522f-5ad18216"} ==》小程序的appSecrete无效,重置或找回该小程序的appSecrete即可。
2022-10-10 2022-10-10 wepy $invoke 转 uniapp
2022-10-10 2022-10-10 uniapp项目重新运行依赖丢失,报:文件查找失败 moment
2022-10-10 2022-10-10 Error in event handler for "service.3-canvas-shareCanvas": "TypeError: Cannot read properties of undefined (reading 'ready')"
2022-10-10 2022-10-10 将url中的中文转成GB2312