js中的深拷贝与浅拷贝

深拷贝与浅拷贝

  浅拷贝:只是复制第一层属性;浅拷贝其实只是引用的拷贝,两者还是指向内存中的同一个地址

  深拷贝:通过递归的方式复制所有的属性;深拷贝就是两者指向不同的内存地址,是真正意义上的拷贝。 

实现浅拷贝的方法

  • 通过es6的解构方式进行拷贝
  • let newArr = [...arr]
  • 通过es6引入的新方法进行拷贝【这里是将target后的多个对象全部合并到target对象中,并返回一个新的完整对象】
  • let newobj = Object.assign(target, ...others)

实现深拷贝的方法

  • 通过递归的方式进行拷贝
  • function deepCopy(target,source){
        for(let index in source){
            if(typeof source[index] === "object"){
                target[index] = {};
                deepCopy(target[index],source[index])
            }else{
                target[index] = source[index];
            }
        }
    }
    let b = {a:1,d:{b:1}};
    let a = {};
    deepCopy(a,b);
     a.d.b = 4;
    console.log(b)
  • 通过JSON的方式进行拷贝
  • let newObj = JSON.parse(JSON.stringify(obj))
  • 通过jQuery的extend方法实现深拷贝
  • var array = [1,2,3,4];
    var newArray = $.extend(true,[],array);
  • Object.assign()拷贝
  •   当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
  • lodash函数库实现深拷贝

  lodash很热门的函数库,提供了 lodash.cloneDeep()实现深拷贝。

原文地址:https://www.cnblogs.com/Ky-Thompson23/p/12545600.html