zoukankan      html  css  js  c++  java
  • 深浅拷贝的理解

    一、理解

    1、深拷贝:当拷贝完一个对象的时候,其中一个对象的数据发生了变化,另一个对象的数据也会发生变化。
    
      因为深拷贝拷贝的是索引
    
    2、浅拷贝:当拷贝完一个对象的时候,其中一个对象的数据发生了变化,另外一个对象的数据 不会发生变化。
    
      因为浅拷贝拷贝的是数值

    二、知识点补充:

    1、合并对象:

     Object.assign()合并对象 
     参数1:需要合并的对象A
     参数2:需要进行合并的对象B
     .....
    
     返回值是一个合并后的对象

    2、堆 和 粘 的理解

    栈:原则  先进后出
        栈里面基本上全部都是放的基本数据类型  和  索引 地址
    
    堆:
        堆里面基本上全部都是放的引用数据类型   数据都存放在堆里面  而索引都存在栈里面

    三、浅拷贝的使用

    //拷贝的对象是多层的情况
    
    例:
    var obj = {
        person:{
            name:"QQQ",
            age:33,
            sex:"女"
        }
    }    
    
    方案一:
    var newObj = Object.assign({},obj)
    console.log(newObj);
    newObj.person.name = "AAA";
    
    console.log(obj,newObj)
    
    方案二:
    //合并对象 跟Object.assign用法一样
    var newObj = $.extend({},obj);
    
    console.log(newObj)
    newObj.person.name = "AAA";
    console.log(obj,newObj)
    
    方案三:
    //封装函数遍历
    function copyObj(obj){
        var newObj = {};
        for(var key in obj){
            newObj[key] = obj[key]
        }
        return newObj;
    }
    
    var newObj = copyObj(obj);
    
    newObj.person.name="AAA";
    console.log(obj,newObj)

    四、深拷贝的使用

    分为:对象是单层和多层的情况
    
        //对象是单层的情况
    var obj = {
        name:"WWW",
        age:33,
        sex:"不详"
    }
    方案一:
    var newObj = Object.assign({},obj);
    console.log(newObj);
    newObj.name = "EEE";
    console.log(obj,newObj)
    ----------------------------------------------
    //对象是多层的情况 var obj = { person: { name: "QQQ", age: 33, sex: "女" } } 方案二、 //前面加true,则表示浅拷贝(注意区别深拷贝) var newObj = $.extend(true,{},obj) console.log(newObj); newObj.person.name = "AAA"; console.log(obj,newObj) 方案三: //使用JSON.parse JSON.stringify var newObj = JSON.parse(JSON.stringify(obj)); console.log(newObj); newObj.person.name="AAA"; console.log(obj,newObj)
  • 相关阅读:
    2020-CCPC- 长春站
    cf2c(模拟退火 步长控制
    高精乘(fft板子
    2019南京网赛 The beautiful values of the palace(思维,树状数组
    2019ICPC网赛南京站B题 super_log(欧拉降幂
    Monument Tour(以前月赛卡住的签到题,今天突然想起拿出来补一补
    LightOJ 1289 LCM from 1 to n(位图标记+素数筛
    neuoj Blurred Pictures(小思维题
    hdu6219 Empty Convex Polygons (最大空凸包板子
    2018宁夏邀请赛 Continuous Intervals(单调栈 线段树
  • 原文地址:https://www.cnblogs.com/-roc/p/10019552.html
Copyright © 2011-2022 走看看