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 ...