zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    浅拷贝赋给的是一个指针,并不是真正的值,仅仅是地址名不同,而地址却是同一个

    var obj = { a:1, arr: [2,3] };
    var shallowObj = shallowCopy(obj);
    function shallowCopy(src) {
      var dst = {};
      for (var i in src) {
          dst[i] = src[i];
      }
      return dst;
    }
    
    shallowObj.arr[1] = 5;
    console.log(obj.arr[1])  // = 5

    我们通过dst[i] = src[i];复制引用类型的操作。引用类型的复制会为新的变量自动分配一个新的值保存在变量对象中,这个新的值,仅仅只是引用类型的一个地址指针。尽管他们相互独立,但是在变量对象中访问到的具体对象实际上是同一个

    深拷贝不是单纯的复制指针了,而是把对象的属性也复制一遍

    //push实现数组深拷贝
    var arr = [1,2,3,4,5]
    var arr2 = copyArr(arr)
    function copyArr(arr) {
        var res = []
        for (var i = 0; i < arr.length; i++) {
         res.push(arr[i])
        }
        return res
    }
    arr2[0]=333;
    console.log(arr[0]);//1
    console.log(arr2);//[333, 2, 3, 4, 5]
    //对象深拷贝
    var obj = {
      name: 'wo',
      sex: 'man',
      old: '18'
    }
    var obj2 = copyObj(obj)
    function copyObj(obj) {
      var res = {}
      for (var key in obj) {
        res[key] = obj[key]
      }
      return res
    }
    obj2.name="1111111";
    console.log(obj2);//{name: "1111111", sex: "man", old: "18"}
    console.log(obj.name);//wo

    深拷贝就是重新给对象在堆上分配一个空间,然后将复制内容到这个新的空间中

  • 相关阅读:
    java几种数据的默认扩容机制
    web.xml配置详解
    Bootstrap文件上传组件
    JAVA四则运算算法
    Oracle 和 mysql 的批量操作Sql语句 的区别
    JAVA使用ItextPDF
    c# 状态机实现
    c++11模拟boost元占位符placeholder
    vs2012 函数参数内存对齐引发编译错误
    windows下matplotlib编译安装备忘
  • 原文地址:https://www.cnblogs.com/aSnow/p/8881378.html
Copyright © 2011-2022 走看看