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/belongs-to-qinghua/p/11117041.html