JS深拷貝

最簡(jiǎn)單的深拷貝

JSON.parse(JSON.stringify)

第三方依賴

https://www.npmjs.com/package/clone-deep

栗子

let people = {name:'yzs',age:21,sex:true}

let obj = JSON.parse(JSON.stringify(test))

obj.name = 'yqq'

people.name? 輸出 'yzs'

哈哈是不是 so easy? But 也有弊端

1 無法復(fù)制函數(shù),正則

2 原型鏈沒了,對(duì)象就是object,所屬的類沒了

3 循環(huán)引用的問題,沒解決


當(dāng)然jQ 的 extend函數(shù)也可以實(shí)現(xiàn)深復(fù)制,但是我目前jQ基本不用了

深淺復(fù)制想必大家都清楚,這里只做簡(jiǎn)單介紹

淺復(fù)制代碼

let people = {name:'yzs', age:28}

let shallowObj =shallowCopy(people)

function shallowCopy(obj){

var temp = {}

for (const prop in obj){

if(obj.hasOwnProperty(prop)){

temp[prop] = obj[prop]

}

}

return temp

}

淺復(fù)制

只復(fù)制一層對(duì)象的屬性,也就是說淺復(fù)制是對(duì)對(duì)象地址的復(fù)制,修改其中一個(gè)對(duì)象的屬性,則另一個(gè)對(duì)象的屬性也會(huì)隨之改變,這就導(dǎo)致people.name和shallowObj.name指向同一塊內(nèi)存地址,

影響

shallowObj.name = 'yqq'

people.name? ?結(jié)果也是'yqq' 而不是原來的'yzs'



深復(fù)制代碼

let people = {name:'yzs', age:28}

let shallowObj =deepCopy(people)

function deepCopy(oldObj,newObj){

var newObj = newObj || {}

for (const i in oldObj){

if(typeof oldObj[i] ==='object'){

if(oldObj[i] ===null){

newObj[i] =null

? ? ? ? ? ? }else {

if(oldObj[i].constructor === Array){

newObj[i] = []

}else {

newObj[i] = {}

}

}

deepCopy(oldObj[i],newObj[i])

}else{

newObj[i] = oldObj[i]

}

}

return newObj

}

深復(fù)制

深復(fù)制會(huì)遞歸賦值對(duì)象所有層級(jí),也就是說深復(fù)制會(huì)開辟新的棧,所以2個(gè)對(duì)象對(duì)象不同的地址,修改其中一個(gè)對(duì)象的屬性,不會(huì)改變另一個(gè)對(duì)象的屬性

不影響

shallowObj.name = 'yqq'

people.name? ?結(jié)果'yzs'?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ECMAScript包含兩個(gè)不同類型的值:基本類型值和引用類型值。 基本類型值指的是簡(jiǎn)單的數(shù)據(jù)段;引用類型值指由多...
    夢(mèng)夜空中最亮的星閱讀 279評(píng)論 0 1
  • 本文思維導(dǎo)圖如下: 本文首發(fā)于我的個(gè)人網(wǎng)站: http://cherryblog.site/本文作者: Cherr...
    sunshine小小倩閱讀 1,099評(píng)論 2 14
  • 前言 對(duì)象是 JS 中基本類型之一,而且和原型鏈、數(shù)組等知識(shí)息息相關(guān)。不管是面試中,還是實(shí)際開發(fā)中我們都會(huì)碰見深拷...
    云峰yf閱讀 24,868評(píng)論 4 38
  • js中有一些基本數(shù)據(jù)類型,而對(duì)象就是像這樣的{ name: 'Larry', skill: 'Node.js' }...
    鐵木真丫丫丫閱讀 269評(píng)論 0 0
  • functiondeepCopy(p,c){ var c = c || {}; for(var i in p){ ...
    凡凡的小web閱讀 129評(píng)論 0 0

友情鏈接更多精彩內(nèi)容