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

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

  • 相关阅读:
    MFC之绘制线条
    CDC类详解
    MFC之消息映射机制实现方法
    VS2008如何自动添加消息映射
    MFC框架程序剖析
    Visual Assist 相同内容高亮显示
    Win32 Console Application、Win32 Application、MFC三者之间的联系和区别
    win32应用程序创建流程
    BigDecimal最基础用法【转】
    html 高亮显示表格当前行【转】
  • 原文地址:https://www.cnblogs.com/aSnow/p/8881378.html
Copyright © 2011-2022 走看看