什么是浅拷贝

浅拷贝只是拷贝的栈区的引用地址


{
    let a = {key1:'小明'}

    function Copy(p){
        // 自定义一个空对象,用来存放遍历过程中拿到的内容
        let c = {};
        // 遍历
        for(let i in p){
            c[i] = p[i]
        }
        // 遍历结束后,把c里得到的内容进行返回输出
        return c
    }

    // 给a对象添加属性key2,并赋值存储一个数组
    a.key2 = ['小结','小兰']

    let b = new Copy(a)

    // 给对象b添加key3属性,并赋值存储一个字符串
    b.key3 = '她俩不一样'
    // 向b对象的key2中追加一个内容,放入数组中
    b.key2.push('小平')
    console.log(b); // { key1: '小明', key2: [ '小结', '小兰', '小平' ], key3: '她俩不一样' }
    console.log(a); // { key1: '小明', key2: [ '小结', '小兰', '小平' ] }

    console.log(a.key3);    // undefined
}

上面这个例子,加一点个人的理解:

因为b对象往数组中push进一个内容,此时是加在’堆‘内容里面的,因为a和b的引用地址都没有变,所以在对象a和b内都加了进去


对象的浅拷贝:

{
    let o1 = {id:1,name:'小民'}
    let o2 = o1
    o2.name = '小李'
    o2.age = 19
    console.log(o1.name); // 小李
    console.log(o2.name);// 小李
    console.log(o1,o2);//{ id: 1, name: '小李', age: 19 } { id: 1, name: '小李', age: 19 }
}

数组的浅拷贝:

{
    let arr1 = [1,2,3,4,5]
    let arr2 = arr1
    arr1[0] = 5
    console.log(arr1,arr2);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值