js實現深拷貝和淺拷貝

2022-07-04 08:33:11 字數 545 閱讀 1105

淺拷貝:

思路----------把父物件的屬性,全部拷貝給子物件,實現繼承。

問題---------如果父物件的屬性等於陣列或另乙個物件,那麼實際上,子物件獲得的只是乙個記憶體位址,不會開闢新棧,不是真正拷貝,因此存在父物件被篡改的可能。

**:

function

deepcopy(o);

for(i in

o);

return

f}

深拷貝:

思路-----------遞迴呼叫'淺拷貝',可以解決子物件修改時會汙染父物件,此時兩個物件指向的不是乙個記憶體位址。

**:

function

deepcopy(p,c);

for(let i in

p); //通過判斷父級物件的屬性的constructor的型別,指定子集物件屬性的型別

deepcopy(p[i],c[i])}; //遞迴呼叫自身進行深層拷貝

else

} return

c;

}

js實現深拷貝和淺拷貝

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

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