JavaScript可以按照两种数据类型来区别。
-
一种是基本数据类型(String,Number,Boolean,Undefined,Null,Symbol)
-
一种是引用数据类型(Object,Array,Function)。
无论是浅拷贝,还是深拷贝都是针对于引用数据类型,因为基本数据类型可以直接赋值。
浅拷贝和深拷贝的区别在于,浅拷贝修改原数据的值后,拷贝的对象会随着发生改变,而深拷贝不会。
**浅拷贝**
最简单的浅拷贝可以使用Object.assign(target,sourse)
eg1:
let obj1={a:1,b:2};
let obj2=Object.assign({},obj1);
console.log(obj1)
eg2:
当然也可以使用扩展运算符...
let obj1={a:1,b:2};
let obj2={...obj1};
eg3:
可以使用常规的方法
function clone(target){
let result={};
if(typeof target !=='object') return
for(let i in target){
result[i]=target[i]
}
return result
}
**深拷贝**
最简单的深拷贝可以使用JSON.parse(JSON.stringify(object);
当然也可以使用递归
function deepClone(target){
if(typeof target !=='object') return
let result={}
for(let i in target){
if(target.hasOwnProperty[i]){
if(typeof target[i]==='object'){
result[i]=deepClone(target[i])
}else{
result[i]=target[i]
}
}
}
return result
}
以上时候最简单的深拷贝,但是有些不足,比如对于数组,Map,Set等类型无法做到拷贝。
以上只是浅入了解,真的是浅入了解。