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

    浅拷贝:就是一个对象B复制另一个对象A,当改变B对象的值是A对象的值也随之改变

    let A={name:'cxr'}
    let B=A;
    console.log(B); //{name:'cxr'}
    B.name='ccc';
    console.log(B);//{name:'ccc'}
    console.log(A);//{name:'ccc'}
    console.log(A===B) //true

    可以看到两个对象的name都被修改了,浅拷贝只是拷贝对象的引用,并没有身层次的拷贝对象的值 A===B 为true ,此时A、B 指向的堆内存中的同一个对象,任何一个修改都会影响所有。

     

    深拷贝:就是实现对象B 复制A 后,改变B不会影响A对象的值

    深拷贝的实现方式:

    1 . JSON.parse(JSON.stringify())

    let obj = {
        a:100,
        b:[10,20,30],
        c:{
          x:10
        },
        d:/^d+$/,
        f:new Date()
    }
    let obj2 = JSON.parse(JSON.stringify(obj));
    obj2.a=200;
    obj2.c.x=100;
    console.log(obj) 
    console.log(obj2)
    console.log(obj===obj2)// false  即两个对象分别指向堆内存中不同的地址

    可以看到 对象obj2 克隆了 对象obj ,并且obj2对象发生改变,无论修改第一层还是第二层都不会影响到obj对象

    简单的深度克隆是可以用这种方式实现的,但是,当在对象obj 中假如 正则表达式 或者时间格式后,

    可以看到正则表达式变成了{}空对象,时间格式也未正常克隆。

    2.自定义深克隆函数

     

     

  • 相关阅读:
    Android深度探索-卷1 第三章
    Android深度探索-卷1 第四章
    Android深度探索-卷1 第二章
    Android深度探索-卷1 第一章
    硬件抽象层HAL
    嵌入式Linux调试技术
    蜂鸣器驱动
    控制发光二极管
    搭建S3C6410开发板的测试环境
    统计单词个数
  • 原文地址:https://www.cnblogs.com/xiaorong-9/p/13968179.html
Copyright © 2011-2022 走看看