淺拷貝
值類型數(shù)據(jù)保存在內(nèi)存棧中,引用類型保存在內(nèi)存堆中.淺拷貝是拷貝引用類型的指針,對于里面的具體數(shù)值沒有拷貝.
1.直接給對象賦值
var a = {
name:'Park',
age:25
}
2.解構(gòu)對象
var foo ={
name:'Park',
}
var bar ={
age:25
}
var park = {...foo,...bar}
深拷貝
當拷貝來的對象不再只是原對象的一個指針,而是每個屬性確確實實存在棧內(nèi)存中,則為深拷貝了
1.JSON對象實現(xiàn)深拷貝
核心思路是把JSON轉(zhuǎn)成字符串存入棧內(nèi)存,再將字符串轉(zhuǎn)為對象
注意:如果對象中包含方法則會被忽略.
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.遞歸實現(xiàn)深拷貝
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
}