// 註意: 基本數據類型不存在深淺拷貝,只是值傳遞,複合數據類型才有深淺拷貝之說 var obj1 = { name: "吳亦凡" }; var obj2 = obj1; obj1.name = "羅志祥"; // 相當於把obj1的指針複製了一份給了obj2,兩個指針指向了堆記憶體中的一塊記憶體地址 ...
// 註意: 基本數據類型不存在深淺拷貝,只是值傳遞,複合數據類型才有深淺拷貝之說
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):複製並創建一個一模一樣的對象,不共用記憶體,修改新對象舊對象不會變。