深拷贝和浅拷贝

Posted 饮尽杯中月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝和浅拷贝相关的知识,希望对你有一定的参考价值。

原理

需要为深拷贝

深拷贝解决方案:

方法一:


但是该方法也是有局限性的:

  • 函数无法拷贝
  • 正则无法拷贝
  • undefined无法拷贝
  • symbol无法拷贝
    优点:
    可以实现二级以下的深拷贝

方法二:


优点:

  • 可以拷贝函数
  • 可以拷贝正则
  • 可以拷贝undefined

缺点:

  • 二级以下无法实现深拷贝

手写


当访问的obj[key]为obj对象或数组的时候,会继续按之前的对象深拷贝操作,先判断是数组还是对象,然后再次进入for循环,如此反复直到符合第一个if(不是对象或者null),将返回值可以赋值给最深层对应的result[key],这样就实现了多级的深拷贝

result[key] = deepClone(obj[key])

我们拷贝应该是oldObj上的自身属性,其对象原型上的属性不能进行拷贝

function deepClone(obj) 
    // 如果是 值类型 或 null,则直接return
    if(typeof obj !== 'object' || obj === null) 
        return obj
    
    
    // 定义结果对象
    let copy = 
    
    // 如果对象是数组,则定义结果数组
    if(obj.constructor === Array) 
        copy = []
    
    
    // 遍历对象的key
    for(let key in obj) 
        // 如果key是对象的自有属性
        if(obj.hasOwnProperty(key)) 
            // 递归调用深拷贝方法
            copy[key] = deepClone(obj[key])
        
    
    
    return copy
 


测试后面两个属性

以上是关于深拷贝和浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

IOS 深拷贝和浅拷贝

深拷贝和浅拷贝怎样理解(通俗具体点儿)

深拷贝和浅拷贝的区别 & 如何实现深拷贝和浅拷贝

python的复制,深拷贝和浅拷贝的区别

什么是深拷贝和浅拷贝以及如何实现深拷贝

关于深拷贝和浅拷贝