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

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

  • 相关阅读:
    中兴ZTE ZXV10 H618B超级密码
    星际1.08下载绝对能玩
    cs脚本
    关于JIRA4.3.3破解的问题,为什么我的就可以破解成功
    Jquery DataTables学习笔记(一)
    如何利用System.Net.Mail类发送EMAIL
    IE鼠标右键查看源文件失效解决办法
    ServU FTP Server远程/本地提升权限
    Laravel的homestead安装
    编程总结3
  • 原文地址:https://www.cnblogs.com/aSnow/p/8881378.html
Copyright © 2011-2022 走看看