zoukankan      html  css  js  c++  java
  • 前端学习之---深拷贝与浅拷贝

    深拷贝和浅拷贝的区别:

    假设有数组对象 a=[1,2,3] 

    我们需要知道的前提是:对象的 指针 实体 是存在不同的地方的,所以:

    如果是把它赋值 b=a,那就是 浅拷贝 ,相当于多了一个指向[1,2,3]的指针b

    此时不管用指针a去改变实体的内容,还是指针b去改变实体的内容,都是一样的,例如:你改变了b[0],而a[0]也是输出一样的内容

     而 深拷贝 就是不仅要申请变量存新的指针,还要申请新的内存用来存和原对象一样的实体!

    如何实现深拷贝?

    function deepCopy(obj = {}) {
            if (typeof obj !== 'object' || obj == null) {
                //参数不是对象或数组,不需要深拷贝,null也不需要
                return obj; //直接返回
            }
    
            let result; //初始化返回结果
            if (obj instanceof Array) {
                result = [];
            } else {
                result = {};
            }
    
            for (let key in obj) {
                //对于数组,key就是索引值0,1,2...
                //对于对象,key就是属性名
                if (obj.hasOwnProperty(key)) {
                    //如果key是对象本身的属性
                    result[key] = deepCopy(obj[key]); //递归
                    //当属性所对应的值是对象的时候就必须递归来进行深拷贝
                }
            }
    
            return result; //返回结果
        }
    

      

  • 相关阅读:
    调试导论
    CSP-S2 2020 游记
    【题解】51nod 1327 棋盘游戏
    基础数学专题复习
    ubuntu 下 zsh 插件及安装方式
    ubuntu 下 Deepin-TIM 折腾笔记
    微服务学习笔记
    使用 Portainer 管理 Docker 笔记(含本地和远程)
    博客收藏
    定制unittest测试报告【转】
  • 原文地址:https://www.cnblogs.com/zhaoyingzhen/p/14008305.html
Copyright © 2011-2022 走看看