深浅拷贝,都是拷贝对象内的数据到新对象,新旧对象内的数据相同。
1.浅拷贝
只拷贝对象的第一层属性,如果对象中还有对象,只是拷贝的内存地址(引用),两者修改会相互影响。用于对象中都是基本数据类型的情况。
2.深拷贝
拷贝对象的多层属性,如果对象中还有对象,会继续拷贝,使用递归实现。
3.深浅拷贝的实现
浅拷贝:
function copy(oldObj) { let newObj = {}; for (let k in oldObj) { newObj[k] = oldObj; } return newObj; }
深拷贝:
function deepCopy(oldObj) { let newObj = {}; for (let k in oldObj) { if (oldObj[k] instanceof Array) { newObj[k] = []; newObj[k] = deepCopy(oldObj); } else if (oldObj[k] instanceof Object) { newObj[k] = {}; newObj[k] = deepCopy(oldObj); } else { newObj[k] = oldObj[k]; } } return newObj; }
4.深浅拷贝的应用场景
查看很多网友分享的业务需求后,我觉得深浅拷贝的应用场景可以用一句话总结:我想要使用这个对象内的数据,但是不想修改原本的对象内的数据内容时,使用深浅拷贝来复制数据,并对新的对象内的数据进行操作。