深拷贝和浅拷贝

    //程序中的拷贝,大多数是发生在数据之间的拷贝.
    //简单类型的数据: 直接拷贝值
    //复杂类型的数据: 拷贝的是地址

复杂类型直接的拷贝:

浅拷贝

    //a): 浅拷贝: 在对原始数据进行拷贝的时候,只拷贝一层数据,如果遇到对象,则
    //直接将对象的地址进行拷贝
    //b): 浅拷贝语法: Object.assign(新对象, 被拷贝的对象)
    //代码验证:
    // let obj = {
    //     uname: 'zs',
    //     mylike: {
    //         pname: '老苏'
    //     }
    // }
    // let newObj = {};    
   
    // //浅拷贝语法,将obj对象的值复制给newObj
    // Object.assign(newObj, obj);

    // //面试最关键的一段代码如下:
    // newObj.uname = '老段';
    // newObj.mylike.pname = 'pink';

    // console.log(newObj); // uname: 老段    pname: pink
    // console.log(obj);   //  uname: zs      pname: pink

    //浅拷贝做总结:
    //1. 浅拷贝在拷贝的过程中遇到对象只会拷贝地址,且影响原始的数据

深拷贝

    //a): 深拷贝: 在对原始数据进行拷贝的过程中,会将原始的数据再拷贝一份进行复制
    //深拷贝之后不会影响原始数据
    //b): 语法1: JSON.stringify(obj);
    //c): 返回值: 返回一个对象形式的字符串
    //d): 语法2: JSON.parse(返回值)
    //e): 返回值: 将字符串转为一个对象,返回的是一个对象

    let obj = {
        uname: 'zs',
        msg: {
            pname: '老苏'
        }
    }

    let newObj = {};

    // 代码演示:
    //1. 先将被拷贝的对象转化为字符串
    let obj_res = JSON.stringify(obj);
    //2. 将字符串转化为对象后拷贝
    newObj = JSON.parse(obj_res);

    newObj.uname = '老段';
    newObj.msg.pname = 'pink';

    console.log(newObj);  // uname  老段     pname: pink
    console.log(obj);     // uname  zs       pname: 老苏



    //总结:
    // 1. 浅拷贝会影响原始数据
    // 2. 深拷贝不会影响元素数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值