计算机语言中有堆和栈的概念,在js中,简单对于堆的理解是引用的数据类型,栈就是基本数据类型。所以也就有了深浅拷贝的概念,那为什么有如下的问题。主要是赋值的操作作为堆内操作,只是单纯的地址引用。
var a = {t:1}
var b = a
b.t = 1
a.t 也是1呢
那么如何实现深拷贝呢
第一种实现思路
如果序列换中存在正则等返回结果就是空
function deepClone(fn){
return JSON.parse(JSON.stringify(fn))
}
第二种实现思路
对于对象中的元素,在基本的数据类型中进行赋值操作。实现对于变量值得赋值
function deepClone(fn){
let c = Array.isArray(fn)?[]:{}
if(fn === null){
return fn
}
if(fn instanceof RegExp){
return fn
}
if(typeof fn !== 'object'){
console.log(fn)
return fn
}
for(let key in fn){
console.log(fn[key])
c[key]=deepClone(fn[key])
}
console.log(c)
return c;
}
var a={
b:1,
tt:[1,3,4],
dd:null,
e:new RegExp(/\d/)
}
console.log(deepClone(a)+"********************")