1. 定义
深拷贝:针对属性值是引用类型,会再次遍历每个属性,将属性复制过来,是一个递归的过程,会开辟新的堆内存,两者完全分离。
浅拷贝:针对属性值是引用类型,会直接将引用复制过来,这样我们无论在新旧数组进行了修改,两者都会发生变化。
2. 利用原生方法实现
2.1 浅拷贝
let newArr = array.concat()let newArr = array.slice()let newArr = array.splice(0)let newArr = [...array]
2.2 深拷贝
let newArr = JSON.parse(JSON.stringify(array))
3. 自定义实现
3.1 浅拷贝
function shadowCopy(obj) {if(typeof obj !== 'object') {return}let ret = obj instanceof Array? [] : {}for(key in obj) {if(obj.hasOwnProperty(key)) {ret[key] = obj[key]}}return ret}
3.2 深拷贝
function deepCopy(obj) {if(typeof obj !== 'object') {return}let ret = obj instanceof Array? [] : {}for(let key in obj) {if(obj.hasOwnProperty(key)) {ret[key] = typeof obj[key] === 'object' && obj[key] !== null?deepCopy(obj[key]) :obj[key]}}return ret}
