瑋科網(wǎng)站建設(shè)人力資源培訓(xùn)與開發(fā)
淺拷貝的理解
淺拷貝的話只會拷貝基本數(shù)據(jù)類型,例如像string、Number等這些,類似:Object、Array 這類的話拷貝的就是對象的一個指針(通俗來講就是拷貝一個引用地址,指向的是一個內(nèi)存同一份數(shù)據(jù)),也就是說當(dāng)拷貝的對象數(shù)據(jù)發(fā)生變化,原始數(shù)據(jù)也會跟著發(fā)生改變,是相互影響的。
補充:淺拷貝的話只會拷貝數(shù)據(jù)的第一層,更深層的是無法拷貝。
代碼注解如下所示:常用的寫淺拷貝方案:我這里用的是Object.assign() 方法
let person={name:"zhang",age:18,arr:[1,2,3],abj:{a:1,b:2,c:3}}let copyObj=Object.assign({},person)console.log(copyObj)//name:'zhang',age: 18, arr:[2,2,2], abj: {a: 'hhahahha', b: 2, c: 3}copyObj.name=18copyObj.arr=[2,2,2] copyObj.abj.a="hhahahha"console.log(copyObj.name,"copyObj") //18,"copyObj"console.log(person.name,"person") //zhang personconsole.log(copyObj.arr,"copyObj") // [2, 2, 2] 'copyObj'console.log(person.arr,"person") // [1, 2, 3] 'person'console.log(copyObj.abj.a,"copyObj")//hhahahha copyObjconsole.log(person.abj.a,"person")//hhahahha person

深拷貝的理解:
深拷貝不僅對指針進(jìn)行了拷貝,還對指針指向的內(nèi)容進(jìn)行了拷貝,也就是說另外申請了一塊內(nèi)存空間,內(nèi)容和原對象一致,但是兩份獨立的數(shù)據(jù),更改原對象時拷貝的對象是不會發(fā)生變化的。
代碼注解如下所示:我這里實現(xiàn)深拷貝的方法是JSON 對象的序列化和反序列化方法實現(xiàn)的.
注意這個方法function,undefine 會丟失
let person={name:"zhang",age:18,arr:[1,2,3],abj:{a:1,b:2,c:3}}let copyobj=JSON.parse(JSON.stringify(person))console.log(copyobj)//{name: 'zhang', age: 18, arr: [1,2,3], abj: { a:1,b:2,c:3}}copyobj.arr[0]=3console.log(copyobj.arr) //[3, 2, 3] console.log(person.arr)//[1, 2, 3]
