浅拷贝和深拷贝

每日浅浅一决: 浅拷贝和深拷贝

  1. 引用型数据是存储在堆中的,它会在栈中保留一个指向堆中位置的指针,而其他类型都是存储在栈中的。
  2. 浅拷贝:浅拷贝只是复制指向某个对象的指针,即它的引用地址,浅拷贝后修改会相互影响。
  3. 深拷贝:深拷贝是将其完全复制,不会指向共同的内存,修改不会相互影响。
  4. 深拷贝的方法
<body>
    <script>
        //数据
        const obj1 = {
            name: "李华",
            age: 20,
            sex: "男",
            address: "四川成都",
            grade: [20, 30, 50, 40],
            girls: {
                name: "琳琳",
                sex: "女",
                age: 20
            }
        }

        // 深拷贝
        function myDeepCopy(obj = []) {
            // 判断传入的参数是否为对象或者null (typeof Array 得到的也是对象)
            if(typeof obj !== 'object' || obj == null) {
                //此时obj为五种基本数据类型之一,即string、number、boolean、null、undefined其中之一
                return obj
            }

            // 开辟新地址,用于保存复制过来的值
            let resulte;
            // 判断参数类型
            if(obj instanceof Array) {
                // 如果是数组
                resulte = []
            } else {
                // 否则为对象
                resulte = {}
            }
            // 继承obj的当前所有属性
            for(let key in obj) {
                resulte[key] = myDeepCopy(obj[key])
            }

            return resulte
        }
        let obj2 = myDeepCopy(obj1)
        console.log("obj2:" + obj2.name)
        obj2.name = "张三"
        console.log("obj1:" + obj1.name)
        console.log("obj2:" + obj2.name)
    </script>
</body>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值