js實現深拷貝和淺拷貝

2021-09-24 07:41:36 字數 1117 閱讀 2610

let obj = };

let newobj = ;

obj.age.age = 25; //修改第二層的obj.age.age,newobj.age.age也會跟著變化

console.log(newobj) // }複製**

注意:資料的slice和concat方法也是淺拷貝,只能拷貝一層

原理:把乙個物件轉化成乙個字串,再把這個字串轉化成乙個物件;

let obj = };

let newobj = json.parse(json.stringify(obj));

obj.age.age = 25; //修改obj.age.age的值

console.log(newobj) //} //並不影響newobj複製**

使用這種方法有一些問題例如:

let obj = ,a:/\d/,b:function

(){},c:undefined};

let newobj = json.parse(json.stringify(obj));

obj.age.age = 25; //修改obj.age.age的值

console.log(newobj) //,a:{}} 會丟失值複製**

注意:這種方式轉不了正則、函式、時間和undefined,會丟失值;

實現深拷貝之前來點面試小知識

//null == undefined true     null === undefined  false

// == ''

true === ''

false

//雙等是要先進行型別轉化再比較所以是true,三等不進行型別轉化直接比較所以是false

複製**

深拷貝方法:

// 數字 字串 function是不需要拷貝的

function deepclone(value)

return obj;

}複製**

好了,我們的深拷貝方法就這樣完成了,絕對好用!!!

js實現深拷貝和淺拷貝

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

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

JS淺拷貝和深拷貝

1.淺拷貝 copy var obj1 物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.var obj2 obj1 物件,陣列之間只有引用賦值 obj2.name 撒哈哈 當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝 深拷貝 var obj1 var ...