浅拷贝
值类型数据保存在内存栈中,引用类型保存在内存堆中.浅拷贝是拷贝引用类型的指针,对于里面的具体数值没有拷贝.
1.直接给对象赋值
var a = {
name:'Park',
age:25
}
2.解构对象
var foo ={
name:'Park',
}
var bar ={
age:25
}
var park = {...foo,...bar}
深拷贝
当拷贝来的对象不再只是原对象的一个指针,而是每个属性确确实实存在栈内存中,则为深拷贝了
1.JSON对象实现深拷贝
核心思路是把JSON转成字符串存入栈内存,再将字符串转为对象
注意:如果对象中包含方法则会被忽略.
function (obj){
var obj = JSON.stringify(obj)
return JSON.parse(obj)
}
Object.assign(target,source)
注意:第一层对象为深拷贝,第二层对象开始就是浅拷贝了
var foo ={
name:'Park',
}
var bar ={
age:25
}
Object.assign(foo,bar)
//foo {name: "Park", age: 25}
3.递归实现深拷贝
function deepCopy(obj){
var newobj = null
if (typeof(obj) =='object'&&obj!==null){
newobj = obj instanceof Array? []:{}
for(var i in obj){
newobj[i] = copy(obj[i])
}
}else{
newobj = obj
}
return newobj
}