溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript深拷貝與淺拷貝

發(fā)布時(shí)間:2020-06-05 09:51:20 來源:網(wǎng)絡(luò) 閱讀:465 作者:sky星辰01 欄目:web開發(fā)

1.先看一個(gè)例子:
JavaScript深拷貝與淺拷貝
從中可以看出,obj1拷貝了obj的值,但只是進(jìn)行了地址的引用,修改obj1的值也影響到了obj的值,沒有創(chuàng)建新對象。

淺拷貝:對基本數(shù)據(jù)類型進(jìn)行值傳遞,對引用數(shù)據(jù)類型進(jìn)行引用傳遞般的拷貝。

深拷貝:對基本數(shù)據(jù)類型進(jìn)行值傳遞,對引用數(shù)據(jù)類型,創(chuàng)建一個(gè)新的對象,并復(fù)制其內(nèi)容

obj2= {
name: 'LiLei',
school: 'HBUT',
age: {
age: '3'
},
run: function aa () {console.log(this.name)}
}
JavaScript深拷貝與淺拷貝
父對象的屬性等于數(shù)組或另一個(gè)對象,那么實(shí)際上,子對象獲得的只是一個(gè)內(nèi)存地址(obj3.grade===obj2.grade),而不是真正的拷貝

對于上面的對象,如何實(shí)現(xiàn)深拷貝
JavaScript深拷貝與淺拷貝

function deepCopy (obj) {
temp = obj.constructor === Array ? [] : {}
for (let val in obj) {
temp[val] = typeof obj[val] == 'object' ? deepCopy(obj[val]) : obj[val]
}
return temp
}
實(shí)現(xiàn)對父對象中的數(shù)組或者對象屬性進(jìn)行循環(huán)拷貝

2.Object.assign(目標(biāo)對象,拷貝來源)
正在做的一個(gè)vue項(xiàng)目中,頻繁使用Object.assign來實(shí)現(xiàn)對像的拷貝。
當(dāng)源目標(biāo)中屬性都是直接類型時(shí),此時(shí)是深拷貝;當(dāng)源目標(biāo)中含有引用類型的屬性時(shí),此時(shí)是淺拷貝。

JavaScript深拷貝與淺拷貝
例子中obj2的屬性grade對象只是引用傳值,沒有實(shí)現(xiàn)真正的拷貝。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI