js深複製淺複製

2021-08-17 01:14:58 字數 1860 閱讀 5091

深淺複製主要是針對於js的引用資料型別的,因為他們不只一層,並且修改乙個變數是不希望修改到另外乙個變數。

淺複製:只複製指向某個物件的指標,新舊物件共享一塊記憶體,修改新物件會改到原物件上。

深複製:不共享記憶體,修改新物件不會改到原物件上。

淺複製實現:

js 簡單的賦值操作一般實現的都是淺複製。

深複製實現的七種方法:

1. 手動複製:

var obj1 = ;

var obj2 = ;

評價:需要手動乙個乙個的複製,比較麻煩,並且如果物件裡還有物件就不可用了。

2. object.assign方法:

object.assign()是es6的新函式,若物件多層則實現的是淺拷貝,拷貝的是物件的屬性的引用,可進行一層的深複製。

var obj1 = ;

var obj2 = object.assign({},obj1); //

3. json.stringify()和json.parse()

使用json.stringify()把物件轉成字串,而json.parse()再把字串轉成新物件即完成了複製。

var obj1 = ;

var obj2 = json.parse(json.stringify(obj1));

評價:深複製之後不管之前的變數是什麼型別,都會變成object,只有可以轉成json格式的物件可使用這個方法,正則(regexp)物件和function物件不可。

4. 遞迴複製

function deepclone(initalobj , finalobj);

for(var i in initalobj)

if(typeof prop === 'object');

arguments.callee(prop , obj[i]);

}else

}return obj;

}var str = {};

var obj = };

deepclone(obj, str);

console.log(str);

deepclone(被複製的物件,所要複製的物件);
5. object.create()

直接使用

var obj1 = ;

var obj2 = object.create(obj1)

object.create()

方法建立乙個新物件,使用現有的物件來提供新建立的物件的__proto__。

6. jquery的$.extend

var obj1 = ;

var obj2 = $.extend(true,{},obj1); //第乙個引數為是否進行深拷貝,第二個引數是目標物件,第二個引數是被複製物件

obj2.name = "xiaobai";

console.log(obj1);

console.log(obj2);

評價:需要引進jquery才可使用

7. lodash函式庫

var _ = require('lodash');

var obj1 = ;

var obj2 = _.clonedeep(obj1);

評價:需要進入lodash函式庫

淺複製 深複製

second,來說說shallow copy and deep copy的定義和我自己的一些理解。僅供參考 淺複製 shallow copy 如果欄位是值型別的。則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件 因此,原始物件及其副本引用同一物件。即被複製物件的所有變數都含有...

深複製 淺複製

深複製又叫深拷貝 淺複製又叫淺拷貝 位拷貝。為了理解什麼叫深複製和淺複製,我們舉乙個例子,假如我們有乙個類叫cdemo,有兩個成員,a 和 str.class cdemo 我們再定義乙個建構函式 cdemo int pa,char cstr 然後執行 cdemo a 10,hello cdemo b...

深複製淺複製

淺複製 所謂的淺拷貝就是拷貝指向物件的指標,意思就是說 拷貝出來的目標物件的指標和源物件的指標指向的記憶體空間是同一塊空間.淺拷貝只是一種簡單的拷貝,讓幾個物件公用乙個記憶體,然而當記憶體銷毀的時候,指向這個記憶體空間的所有指標需要重新定義,不然會造成野指標錯誤 深複製所謂的深拷貝指拷貝物件的具體內...