前幾天阿里電話面的時候有問到如何進行深拷貝
這里總結(jié)一下
- 第一種:借助JSON深拷貝
思路是先把對象變成JSON字符串,再轉(zhuǎn)化成對象
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,函數(shù),引用,環(huán)....
- 第二種:遞歸拷貝
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
這里并沒有考慮到環(huán)的情況