淺析賦值、淺拷貝、深拷貝的區別
1、原理
賦值:將某一物件賦給某個變數的過程,稱為賦值。
淺拷貝:淺拷貝是建立一個物件,這個物件有著原始物件屬性值的一份精準拷貝,如果屬性是基本型別,拷貝的就是基本型別的值;如果屬性是引用型別,拷貝的就是記憶體地址,如果其中一個物件改變了這個地址,就會影響到另一個物件。
深拷貝:深拷貝就是將一個物件從記憶體中完整的拷貝一份出來,從堆記憶體中開闢一個新的區域存放新物件,且修改新物件不會影響原有的物件。
2、區別
賦值:當我們將一個物件賦值給另外一個新的變數時,賦的其實是該物件在棧中的地址,而不是堆中的資料。也就是說,兩個物件同時指向一個儲存空間,是聯動的,無論修改哪個物件都會影響另一個物件。
淺拷貝:如果拷貝物件修改的屬性是基本資料型別,則不會影響原始物件;如果修改的屬性是引用型別,則會影響原始物件。
深拷貝:新拷貝物件會在記憶體中拷貝一份新的資料儲存,因此不論如何修改都不會改變原有物件。
3、實現方式
淺拷貝:
const originObj = {person: 'Jack'};
// 1.Object.assign()
const newObj1 = Object.assign({}, originObj);
// 2.Lodash中的_.clone()方法
const newObj2 = _.clone(originObj);
// 3.展開運算子...
const newObj3 = {...originObj};
// 4.array.prototype.concat()
const newObj4 = ['1','2','3'].concat();
// 5.array.prototype.slice()
const newObj5 = ['1','2','3'].slice();
深拷貝:
const originObj = {person: 'Jack'};
// 1.JSON.parse(JSON.stringify())
const newObj1 = JSON.parse(JSON.stringify(originObj));
// 2.Lodash中的_.cloneDeep()方法
const newObj2 = _.cloneDeep(originObj);
// 3.extend()
const newObj3 = $.extend(true, {}, originObj);
相關文章
- Python - 物件賦值、淺拷貝、深拷貝的區別Python物件賦值
- 賦值、淺拷貝與深拷貝賦值
- js資料型別賦值,淺拷貝,深拷貝JS資料型別賦值
- 【Python】直接賦值,深拷貝和淺拷貝Python賦值
- 淺拷貝&深拷貝
- IOS學習之淺析深拷貝與淺拷貝iOS
- 淺拷貝和深拷貝
- 深拷貝和淺拷貝
- 淺拷貝與深拷貝
- 淺談深拷貝與淺拷貝?深拷貝幾種方法。
- 深入淺出深拷貝與淺拷貝
- 淺探js深拷貝和淺拷貝JS
- 深拷貝和淺拷貝的區別是什麼?實現一個深拷貝
- 深入淺出的“深拷貝與淺拷貝”
- JS深拷貝與淺拷貝JS
- iOS深拷貝和淺拷貝iOS
- js 深拷貝和淺拷貝JS
- python深拷貝與淺拷貝Python
- JavaScript淺拷貝和深拷貝JavaScript
- Java深拷貝和淺拷貝Java
- Python淺拷貝與深拷貝Python
- 物件深拷貝和淺拷貝物件
- JavaScript深拷貝和淺拷貝JavaScript
- javascript 淺拷貝VS深拷貝JavaScript
- js 淺拷貝和深拷貝JS
- java深克隆(深拷貝)和淺克隆(淺拷貝)Java
- 【進階4-1期】詳細解析賦值、淺拷貝和深拷貝的區別賦值
- js的深拷貝和淺拷貝JS
- python 指標拷貝,淺拷貝和深拷貝Python指標
- 淺談Java中的淺拷貝和深拷貝Java
- 龍叔python-直接賦值,深拷貝,淺拷貝的簡單解析Python賦值
- python學習筆記–深拷貝與淺拷貝的區別Python筆記
- go slice深拷貝和淺拷貝Go
- js之淺拷貝和深拷貝JS
- ECMAScript-淺拷貝和深拷貝
- C++淺拷貝和深拷貝C++
- 深拷貝、淺拷貝與Cloneable介面
- 實現物件淺拷貝、深拷貝物件