深拷貝和淺拷貝實現方法以及優缺點

2021-09-19 23:20:27 字數 1233 閱讀 9178

深拷貝和淺拷貝:

// 1.淺拷貝只是拷貝了引用, 資料在記憶體中還是乙個, 如果引用的物件發生了變化, 該變數也會同步變化.

// 2.深拷貝相當於把記憶體上的資料拷貝了乙份, 此時修改該變數不會影響原來的變數, 同理修改原來的變數也不會影響現在的變數.

淺拷貝的實現方法:

const a = ;

const b = a;

a.name = "隔壁老王";

console.log(a);

console.log(b);

console.log(a == b); //true

深拷貝三種方式:

//方法一:json.parse(json.stringify(a))

const a = ;

const b = json.parse(json.stringify(a));

b.name = "隔壁老李";

console.log(a);

console.log(b);

console.log(a == b);//false

缺點:json.parse(json.stringify(a)) 方法缺陷是不能拷貝函式

方法二、使用jquery的$.extend方法也可以實現深拷貝 但在react和vue.js不能使用dom元素操作

當第乙個引數填true的時候是乙個深層次的拷貝

第二個引數需要合併的物件

第三個引數 第四個引數......被合併的物件

var obj = };

var newobj = $.extend(true,{},obj);

newobj.datas.price = 99;

console.log(newobj,obj);

缺點:開闢記憶體空間拷貝每乙個節點身上的資料 浪費效能

//方法三:遞迴實現

var obj = }}

function deepcopy(obj);

for(var key in obj)

}else

return newobj;

}var obj1 = deepcopy(obj);

obj1.name = '小李';

console.log(obj1==obj);

console.log(obj);

console.log(obj1);

console.log(obj1.fn().action)

淺拷貝和深拷貝的區分以及實現

淺拷貝和深拷貝的區別以及編寫 資料型別分為基本資料型別和引用資料型別 基本資料型別 儲存在棧中 引用資料型別 儲存的是該物件在棧中的引用,真實的資料存放在堆記憶體中 引用資料型別在棧中儲存了指標,該指標指向該實體的起始位址。當直譯器尋找引用值時,會首先檢索其在棧中的位址,取得位址後從堆中獲得實體。簡...

js 深拷貝和淺拷貝區別,以及實現深拷貝的方法

定義 1.深拷貝 function deepcopy obj var obj say console.log deepcopy obj 注意 這種拷貝方法不可以拷貝一些特殊的屬性 例如正規表示式,undefine,function function deepcopytwo obj if obj ty...

JS 深拷貝和淺拷貝概念,以及實現深拷貝的三種方式

1 堆疊 棧 stack 系統自動分配的記憶體空間,記憶體會由系統自動釋放,用來存放函式的引數值,區域性變數的值等,特點是先進後出。堆 heap 系統動態分配的記憶體,記憶體大小不一,記憶體不會自動釋放。一般由程式設計師分配釋放,主要負責像obejct這種變數型別的儲存。2 基本資料型別 概念 存放...