深拷貝和淺拷貝:
// 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 基本資料型別 概念 存放...