第一种:JSON 来深拷贝
var a = {...}
var b = JSON.parse( JSON.stringify(a) )
缺点:JSON 不支持函数、引用、undefined、RegExp、Date……
第二种:递归拷贝
function clone(object){
var object2
if(! (object instanceof Object) ){
return object
}else if(object instanceof Array){
object2 = []
}else if(object instanceof Function){
object2 = eval(object.toString())
}else if(object instanceof Object){
object2 = {}
}
你也可以把 Array Function Object 都当做 Object 来看待,参考 https://juejin.cn/post/6844903461000069128
for(let key in object){
object2[key] = clone(object[key])
}
return object2
}
思路:先判断是否是对象,如果不是的话判断是否为Array,是否是Function,是否是Object,最后遍历进行复制
区别:
1.浅拷贝并不复制对象本身而是复制一个指针,新对象和旧对象都是在同一块内存地址
2.深拷贝则会复制整个对象,新对象与旧对象是两块内存地址