你瞅啥呢

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}都属于浅拷贝方式,好了,快点检查你的代码是否存在这种不符合期望的写法吧。

 

posted @   叶乘风  阅读(332)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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
点击右上角即可分享
微信分享提示