js深拷贝

深拷贝我在开发的时候经常会遇到与实现,但是原来是不知道叫做深拷贝,知道看见一些推文的时候才醒悟过来。深拷贝其实就是为了解决引用类型数据的复制问题,引用类型的数据如果你用“=”号进行复制的时候,只是复制了地址,这是浅拷贝,当源数据与复制数据之中不管是谁修改一些值的时候,另一个的值也会跟着变,这就不好了。
对于深拷贝与浅拷贝的形象理解就是:

浅拷贝:张三换了一个名叫做李四,两个名字其实都是一个人,张三干了坏事其实也是李四干了坏事
深拷贝:通过克隆技术将张三克隆了一个,叫做李四,这两个长的一模一样,但是是两个个体,他俩干啥都不会影响另一个

如果确定是对象以及没有functionundefinednull时可以考虑使用JSON.stringifyJSON.parse简单粗暴解决,但如果存在这三种类型时是行不通的,这三个会被忽略,那么解决就是如下:

<script>
    let obj = {
        a: 1,
        b: { b1: "qwe", b2: "asd", b3: "zxc" },
        c: function () {
            console.log("ccc")
        },
        d: [1, 2, 3, 4],
        e: undefined,
        f: null,
        g: false
    }
    let arr = [1, "2", { id: 1, name: "张三" }, undefined, null, "", function () { console.log("ccc") }];

    function deepCopy(obj) {
        let result = Array.isArray(obj) ? [] : {};
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                // 这里注意null的typeof是object!!!
                if (typeof obj[key] === "object" && obj[key] !== null) {
                    result[key] = deepCopy(obj[key]);
                }
                else {
                    result[key] = obj[key];
                }
            }
        }
        return result;
    }

    let deepCopyResult = deepCopy(obj);
    console.log(deepCopyResult);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要葱花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值