深拷貝和淺拷貝
如何區分深拷貝與淺拷貝,
假設B複製了A,修改A的時候,看B是否發生變化
如果B跟著也變了,說明是淺拷貝,拿人手短!(修改堆記憶體中的同一個值)
如果B沒有改變,說明是深拷貝,自食其力!(修改堆記憶體中的不同的值)
JavaScript的資料型別:
(1) 基本資料型別:數值、字串、布林、null、undefined (值型別)
(2) 複雜(複合)資料型別:物件 (引用型別)
基本資料型別儲存在棧記憶體,引用型別儲存在堆記憶體中。
淺拷貝
通常意義上,對 陣列 和 物件 的複製
特點:只是簡單的複製拷貝 引用資料型別的地址
地址相同的變數,操作引用的資料型別,彼此都會有影響
淺拷貝程式碼解釋:
1.引用型別的複製
執行原理
此時是 賦值arr1中儲存的陣列的記憶體地址
arr1和arr2中儲存的是相同的記憶體地址,指向的是一個相同的陣列
如果arr1和arr2對這個陣列做出修改,都會影響另一個變數的輸出
let arr1=[“pink”,“red”];
let arr2=arr1;
arr2[0]=“oranged”;
console.log(arr1);// [“oranged”, “red”]
console.log(arr2);// [“oranged”, “red”]
2.基本型別的複製
執行原理:賦值的時候,在棧記憶體中重新開闢記憶體,存放變數b,所以在棧記憶體中分別存放著變數a、b各自的值,修改時互不影響
var a = 1;
var b = a;//複製
console.log(b)//1
a = 2;//改變a的值
console.log(b)//1
深拷貝
概念:完整的複製拷貝 一個引用資料型別中的數值資料,到另一個引用資料型別中 兩個變數 是兩個的獨立的引用資料型別 是兩個獨立的儲存空間 一個變數操作 引用資料型別 不會影響另一個變數
深拷貝程式碼解釋
通過迴圈遍歷,獲取 arr3中的所有數值,複製拷貝在arr4中
此時arr4和arr3雖然數值相同,但是兩個獨立的引用資料型別,是兩個獨立的空間
此時arr4或者arr3 , 修改資料,不會對另一個引用資料型別造成影響
et arr3=[1,2,3,4,5];
let arr4=[];
arr3.forEach(function(item){
arr4.push(item);
})
arr4[0]=“北京”;
console.log(arr3);//[1, 2, 3, 4, 5]
console.log(arr4);//[“北京”, 2, 3, 4, 5]
相關文章
- 淺拷貝和深拷貝
- iOS深拷貝和淺拷貝iOS
- js 深拷貝和淺拷貝JS
- JavaScript淺拷貝和深拷貝JavaScript
- Java深拷貝和淺拷貝Java
- 物件深拷貝和淺拷貝物件
- JavaScript深拷貝和淺拷貝JavaScript
- js 淺拷貝和深拷貝JS
- 淺拷貝&深拷貝
- python 指標拷貝,淺拷貝和深拷貝Python指標
- 淺探js深拷貝和淺拷貝JS
- go slice深拷貝和淺拷貝Go
- js之淺拷貝和深拷貝JS
- ECMAScript-淺拷貝和深拷貝
- C++淺拷貝和深拷貝C++
- 深度解析深拷貝和淺拷貝
- JavaScript之深拷貝和淺拷貝JavaScript
- js的深拷貝和淺拷貝JS
- 聊聊物件深拷貝和淺拷貝物件
- java深克隆(深拷貝)和淺克隆(淺拷貝)Java
- 淺拷貝與深拷貝
- 淺談深拷貝與淺拷貝?深拷貝幾種方法。
- js實現深拷貝和淺拷貝JS
- VUE 中 的深拷貝和淺拷貝Vue
- 對淺拷貝和深拷貝的理解
- JS深拷貝與淺拷貝JS
- python深拷貝與淺拷貝Python
- Python淺拷貝與深拷貝Python
- javascript 淺拷貝VS深拷貝JavaScript
- 淺談Java中的淺拷貝和深拷貝Java
- 深入淺出深拷貝與淺拷貝
- Javascript知識點:淺拷貝和深拷貝JavaScript
- javaScript深拷貝和淺拷貝簡單梳理JavaScript
- 【Python】直接賦值,深拷貝和淺拷貝Python賦值
- Python擴充套件_淺拷貝和深拷貝Python套件
- js 陣列的淺拷貝和深拷貝JS陣列
- [JS系列二]談談深拷貝和淺拷貝,如何實現深拷貝JS
- 深拷貝、淺拷貝與Cloneable介面