// 注意: 基本資料型別不存在深淺拷貝,只是值傳遞,復合資料型別才有深淺拷貝之說
var obj1 = { name: "吳亦凡" }; var obj2 = obj1; obj1.name = "羅志祥";
// 相當于把obj1的指標復制了一份給了obj2,兩個指標指向了堆記憶體中的一塊記憶體地址,改變其中一個會影響另外一個(淺拷貝) // 復合資料型別直接賦值就是淺拷貝操作 console.log(obj2.name);//羅志祥
// 復制一個復合資料型別,改變其中一個,另一個不受影響,兩個物件是獨立的,這樣的拷貝就是深拷貝 var obj3 = { name: "李云迪" }; var obj4 = {}; for (const k in obj3) { // k===> "name" // obj4.name=obj3.name // obj4.name="李云迪" obj4[k] = obj3[k] }
obj3.name="李易峰"; console.log(obj4.name);//李云迪
// 總結: 深拷貝和淺拷貝的區別? // 淺拷貝只是增加了一個指標,指向了已經存在的記憶體地址,如果原來的物件發生了變化,那么淺拷貝出來的物件也會改變 // 深拷貝是申請了一塊新的記憶體,增加了一個指標,兩個指標指向不同的記憶體地址,兩個物件互不影響
// 另一種說法 // 淺拷貝(shallow copy):只復制指向某個物件的指標,而不復制這個物件本身,新舊物件共享一塊記憶體, // 深拷貝(deep copy):復制并創建一個一模一樣的物件,不共享記憶體,修改新物件舊物件不會變,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/549169.html
標籤:JavaScript
上一篇:JavaScript中計時器requestAnimationFrame、setTimeout、setInterval、setImmediate的使用和區別
下一篇:前端隨筆
