瑋科網(wǎng)站建設(shè)人力資源培訓(xùn)與開(kāi)發(fā)
淺拷貝的理解
淺拷貝的話(huà)只會(huì)拷貝基本數(shù)據(jù)類(lèi)型,例如像string、Number等這些,類(lèi)似:Object、Array 這類(lèi)的話(huà)拷貝的就是對(duì)象的一個(gè)指針(通俗來(lái)講就是拷貝一個(gè)引用地址,指向的是一個(gè)內(nèi)存同一份數(shù)據(jù)),也就是說(shuō)當(dāng)拷貝的對(duì)象數(shù)據(jù)發(fā)生變化,原始數(shù)據(jù)也會(huì)跟著發(fā)生改變,是相互影響的。
補(bǔ)充:淺拷貝的話(huà)只會(huì)拷貝數(shù)據(jù)的第一層,更深層的是無(wú)法拷貝。
代碼注解如下所示:常用的寫(xiě)淺拷貝方案:我這里用的是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

深拷貝的理解:
深拷貝不僅對(duì)指針進(jìn)行了拷貝,還對(duì)指針指向的內(nèi)容進(jìn)行了拷貝,也就是說(shuō)另外申請(qǐng)了一塊內(nèi)存空間,內(nèi)容和原對(duì)象一致,但是兩份獨(dú)立的數(shù)據(jù),更改原對(duì)象時(shí)拷貝的對(duì)象是不會(huì)發(fā)生變化的。
代碼注解如下所示:我這里實(shí)現(xiàn)深拷貝的方法是JSON 對(duì)象的序列化和反序列化方法實(shí)現(xiàn)的.
注意這個(gè)方法function,undefine 會(huì)丟失
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]
