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)
  • 相关阅读:
    FFT学习及简单应用(一点点详细)
    Codeforces 1131 (div 2)
    【NOI2012】魔幻棋盘
    【hdu多校联考第二场】Odd Shops
    【Helvetic Coding Contest 2018】B2. Maximum Control (medium)
    解线性同余方程组
    Math teacher's homework
    【NOIP模拟赛】一道挖掉背景的数学题
    逆向基础-模块隐藏之断链
    解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求
  • 原文地址:https://www.cnblogs.com/-roc/p/10019552.html
Copyright © 2011-2022 走看看