1. 程式人生 > >javascript的深淺拷貝

javascript的深淺拷貝

詳細 undefine 堆內存 rip 資料 而在 OS function 嘗試

查閱資料,看到有關深淺拷貝上面的誤區,有人說數組的slice()與concat()方法實現的是深拷貝。對此我做了一些嘗試並詳細理了一下關於js的深淺拷貝問題。首先我們要知道數據類型的存儲方式——

基本類型和引用類型

js中變量分為兩類:

基本類型:undefined,null,字符串,數值,布爾

引用類型:統稱為object。具體的有Object,Array,Function等

重點是這兩種類型的存儲方式了:基本類型的數據是存放在棧內存中的,而引用類型的數據是存放在堆內存中的。

基本數據類型,是這個樣子的:

技術分享圖片

引用類型保存在堆中,棧內的是變量的標識符以及對象在堆內存中的存儲地址,當需要訪問引用類型(如對象,數組等)的值時,首先從棧中獲得該對象的地址指針,然後再從對應的堆內存中取得所需的數據。

技術分享圖片

所以對於這兩種類型的賦值是有不同的:

當你在復制基本類型的時候,相當於把值也一並復制給了新的變量。

而在復制引用類型的時候,實際上只是復制了指向堆內存的地址,即原來的變量與復制的新變量指向了同一個東西。

javascript的深淺拷貝