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

2021-10-11 18:55:37 字數 1011 閱讀 9877

定義:

1.深拷貝

function deepcopy(obj) 

var obj = $/,

say: () =>

}console.log(deepcopy(obj)); // }

注意:這種拷貝方法不可以拷貝一些特殊的屬性(例如正規表示式,undefine,function)

function deepcopytwo(obj) ;

if (obj && typeof obj == 'object') else }}

return objclone;

}var obj = $/,

say: () =>

}console.log(deepcopy(obj)); // }

淺拷貝

function ******clone(initalobj) ;    

for ( var i in initalobj)

return obj;

}var obj = ,

c:["bob", "tom", "jenny"],

d:function()

}var obj1 = ******clone(obj);

console.log('obj1=>>>',obj1); // , c: (3) ["bob", "tom", "jenny"], d: ƒ () }

obj1.c = ['mm', "tom", "jenny"]; // 一層,作為整體,重寫,全改變;改變屬性值,不改變原物件

console.log('obj=>>>',obj); // obj.c => ["bob", "tom", "jenny"]

obj1.c[0] = 'mm'; // 淺拷貝時,改變屬性的屬性值,改變原物件

console.log('obj=>>>',obj); // obj.c => ["mm", "tom", "jenny"]

js實現深拷貝和淺拷貝

let obj let newobj obj.age.age 25 修改第二層的obj.age.age,newobj.age.age也會跟著變化 console.log newobj 複製 注意 資料的slice和concat方法也是淺拷貝,只能拷貝一層 原理 把乙個物件轉化成乙個字串,再把這個字串...

js實現深拷貝和淺拷貝

淺拷貝 思路 把父物件的屬性,全部拷貝給子物件,實現繼承。問題 如果父物件的屬性等於陣列或另乙個物件,那麼實際上,子物件獲得的只是乙個記憶體位址,不會開闢新棧,不是真正拷貝,因此存在父物件被篡改的可能。function deepcopy o for i in o return f 深拷貝 思路 遞迴...

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

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