let obj = {
a: 1,
b: 2,
c: [1, 2, 3],
d: {
a: 1,
b: 2,
c:{
d:1
}
}
}
//淺拷貝
let shallowObj = obj
console.log(shallowObj)//打印obj
/**如果改變shallowObj的屬性,obj屬性也會(huì)跟著更改,因?yàn)閷?duì)象是引用類型,直接賦值會(huì)將shallowObj指向obj引用地址而非再開辟一個(gè)新的棧,所以改變
* shallowObj屬性引用地址屬性也會(huì)變化則obj的值也會(huì)跟著變化
*/
shallowObj.a=2
console.log(obj.a)//2
//深拷貝
function deepClone(target) {
if(target===null || typeof target !="object") return target
let cloneObj =Array.isArray(target)?[]:{}
for(let i in target){
cloneObj[i] = deepclone(target[i])
}
return cloneObj
}
// 因?yàn)槭莿?chuàng)建了一個(gè)新的對(duì)象,所以deepObj改變不會(huì)影響obj的變化
let deepObj = deepClone(obj)
deepObj.d.c.d = 2
console.log(obj.d.c.d)//1
js淺拷貝與深拷貝
最后編輯于 :
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 淺拷貝與深拷貝 淺拷貝和深拷貝的對(duì)比,主要體現(xiàn)在引用數(shù)據(jù)類型的拷貝上,對(duì)于淺拷貝來說,B拷貝了A,A改變,B會(huì)受影...
- 深拷貝 方案一 : 方案二:用JSON.stringify轉(zhuǎn)為字符串 再用JSON.parse把字符串再轉(zhuǎn)為新的對(duì)...
- 前幾天面試,筆試時(shí)有道題是要自己寫一個(gè)例子實(shí)現(xiàn)深拷貝,頓時(shí)懵逼了。深拷貝也不是沒接觸過,只是以前實(shí)際項(xiàng)目中...
- 淺拷貝:在對(duì)js數(shù)組進(jìn)行操作時(shí),我們常需要對(duì)數(shù)組進(jìn)行賦值備份,但如果只是簡單的把它賦值給其它變量的話,只需要隨便更...
- title: JS淺拷貝與深拷貝的學(xué)習(xí)記錄date: 2017年9月21日 23:26:14tags: jscat...