前几天阿里电话面的时候有问到如何进行深拷贝
这里总结一下
- 第一种:借助JSON深拷贝
思路是先把对象变成JSON字符串,再转化成对象
function JSONClone(obj){
if(!(obj instanceof Object)){
return obj
}else{
var obj2
var str = JSON.stringify(obj)
var obj2 = JSON.parse(str)
}
return obj2
}
var dem = JSONClone({a:2,c:3,v:{x:4}})
console.log(dem)
弊端是JSON不支持undefined,函数,引用,环....
- 第二种:递归拷贝
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 = {}
}
for(let key in object){
object2[key] = clone(object[key])
}
return object2
}
var fun = clone(()=>{console.log(1)})
fun() //1
这里并没有考虑到环的情况
网友评论