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

js中的深淺拷貝

js中的深拷貝與淺拷貝

深拷貝:

如果拷貝的時候,將當前物件的資料的引用結構都拷貝一份,即深拷貝,資料在記憶體中獨立存在。

淺拷貝:

若拷貝的時候,只針對當前物件的屬性地址的拷貝,即淺拷貝。

拷貝:

複製一份,指將物件資料複製一份。

*注意:在討論深\淺拷貝的時候,一定要保證物件的屬性是引用型別。

 var car = {name:'法拉利'};
    var p = {name:'張三',age:28,car:car};

// 並不是拷貝,並沒有對p物件有任何拷貝行為
    var pCopy=p;

// 淺拷貝的程式碼實現
    var pCopy = {};
    pCopy.name= p.name;
    pCopy.age= p.age;
    pCopy.car= p.car;

//深拷貝的程式碼實現
var pCopy = {}; pCopy.name= p.name; pCopy.age= p.age; pCopy.car= {}; pCopy.car.name = car.name; //淺拷貝的實現 var car = { name: "賓士"}; var p = { name: "張三", age: 27, car: car, copy: function () { // 建立物件 var temp = {}; // 複製屬性,在copy中使用this表示當前物件
for(var k in this ) { temp[k] = this[k]; } // 返回新物件 return temp; } }; var p1 = p.copy(); for(var k in p1){ console.log(k+'-->'+p1[k]); } //深拷貝的實現 var p = { name: "張三", age: 27, car: car, deepCopy: function
() {
// 建立物件 var temp = {}; // 複製屬性,判斷屬性是否為引用型別 for (var k in this){ if(typeof this[k] === 'object'){ temp[k] = this[k].deepCopy(); }else { temp[k] = this[k]; } } return temp; } };