javaScript之深拷貝與淺拷貝

來源:互聯網
上載者:User

標籤:修改   define   記憶體位址   log   也會   array   string   他也   個數   

 js中有兩種資料類型:

     1.  基本類型  :  Number、String、Boolean、Null、Undefined 

     2.  複雜類型  :  Object 、Array

  深拷貝和淺拷貝只針對複雜類型的資料,因為基本類型資料的定義都會重新開闢新的記憶體。

  淺拷貝拷貝的是記憶體位址,只是增加一個指標指向已有的記憶體,這時多個資料共用一個記憶體空間;深拷貝是新增了指標並且新開闢了記憶體空間,新指標指向新的記憶體。

淺拷貝:

var a={
name:‘WangJing‘,
sex:‘女‘,
age:‘25‘
};
var b = a ;
b.name = ‘白子畫‘;
console.log(a.name); //白子畫--------------淺拷貝:拷貝的是記憶體位址,指標指向同一個記憶體空間,修改其中一個其他也會改變

修改對象b的屬性值,對象a的屬性值也會改變,這就是淺拷貝 (數組也是一樣)

 

深拷貝:

var c = {}; //不要寫 var c; 會報錯
function extend(a,b){
   for(var prop in a){
       b[prop]=a[prop];
   }
}
extend(a,c);
c.name = "胡歌";
console.log(a.name); //白子畫 --------------深拷貝:建立記憶體,新指標指向新的記憶體空間    修改其中一個不會影響另外的資料

 

 

以下代碼可以解決深拷貝

function extend(a, b) {for(var prop in a) {//判斷是否是基礎資料型別 (Elementary Data Type)if(typeof a[prop] === "object") {b[prop] = (a[prop].constructor === Array) ? [] : {};//對象和數組區別處理extend(a[prop], b[prop]);} else {b[prop] = a[prop];}}}

 

javaScript之深拷貝與淺拷貝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.