var a = 1;當然,這也算不上深拷貝,因為深拷貝本身只針對較為複雜的object型別資料。b = a; // 棧記憶體會開闢乙個新的記憶體空間,此時b和a都是相互獨立的
b = 2;
console.log(a); // 1
當b=a進行拷貝時,其實複製的是a的引用位址,而並非堆裡面的值。
而當我們a[0]=1時進行陣列修改時,由於a與b指向的是同乙個位址,所以自然b也受了影響,這就是所謂的淺拷貝了。
那,要是在堆記憶體中也開闢乙個新的記憶體專門為b存放值,就像基本型別那樣,豈不就達到深拷貝的效果了
function deepclone2(obj)缺點: 無法實現對物件中方法的深拷貝,會顯示為undefined
js深拷貝與淺拷貝區別,如何實現深拷貝
首先我們需要弄清楚什麼是淺拷貝,其實我個人覺得淺拷貝從性質上和事件冒泡一樣,當出現這種事件時就代表出問題了 首先要看看js資料的儲存空間 按儲存空間我們可以簡單將js資料分為兩大類 基礎變數,整個存在棧中。還有一種是匯入型別 例如 陣列 json物件 null等 他們的 名相當於乙個指標,而真正的變...
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 深拷貝 思路 遞迴...