首先:深拷贝和浅拷贝只针对引用类型
浅拷贝:拷贝的是地址
常见方法:
1.拷贝对象:Object.assgin()
2.拷贝数组:Array.prototype.concat()
深拷贝:拷贝的是对象,不是地址
常见方法:
1.通过递归实现深拷贝
2.lodash/cloneDeep
3.通过json.stringfy()实现
手写浅拷贝:
<script>
// 1.浅拷贝
const obj = {
name: '张三',
age: 18
}
const a = {}
Object.assign(a, obj)
a.name = "李四"
console.log(a,'a');
console.log(obj,'obj');
</script>
手写深拷贝:
<script>
// 深拷贝 通过递归实现深拷贝
const object = {
uname: 'pink',
age: 18,
hobby: ['乒乓球', '足球'],
family:{baby1:'大宝',baby2:'小宝'}
}
const objectCopy = {}
// 手写一个深拷贝函数
function deepCopy(newObj, oldObj) {
for (let k in oldObj) {
// 深层级是数组
if (oldObj[k] instanceof Array) {
newObj[k] = []
deepCopy(newObj[k], oldObj[k])
// 深层级是对象
} else if (oldObj[k] instanceof Object) {
newObj[k] = {}
deepCopy(newObj[k], oldObj[k])
}
else {
newObj[k] = oldObj[k]
}
}
}
deepCopy(objectCopy, object)
objectCopy.age = 17
objectCopy.hobby[0] = '花滑'
objectCopy.family.baby1 = '新baby1'
console.log(objectCopy, '新数组');
console.log(object, '老数组');
</script>
控制台结果: