JS淺拷貝與深拷貝實現方式

2022-07-26 16:45:16 字數 891 閱讀 6223

js淺拷貝與深拷貝只針對的是陣列(array)和物件(object)兩種引用資料型別。引用型別的資料在記憶體中分兩部分儲存,分別是儲存在棧中的引用位址和儲存在堆中的資料。

淺拷貝其實拷貝的是引用型別資料的位址,兩個物件共享堆中的資料,乙個物件改變了某個屬性值,另乙個物件的屬性值也會跟著改變。

而深拷貝則會同時拷貝引用位址和資料,之後兩個物件之間是完全獨立的,互不影響。

淺拷貝實現方式

//

物件的拷貝

var newobj =object.assign({}, obj);

//陣列的拷貝

var newarr = arr.concat();或 var newarr = arr.slice();

深拷貝實現方式

1、var newobj = json.parse(json.stringify(obj));該方式實現簡單,但是不能拷貝函式。

2、遞迴函式

function

deepcopy(obj) ;

for(var i in

obj)

}return

result;

}else

}

注:因為js並沒有對hasownproperty屬性名進行保護,在obj物件上可能存在同名的屬性方法,如下:

var obj =,

name: 'hello object'};

obj.hasownproperty(i)條件語句將始終返回false,這顯然不是我們期望的,所以可以使用原型上的hasownproperty方法,object.prototype.hasownproperty.call(obj, i);

js深拷貝與淺拷貝

1 基礎知識 基本型別與引用型別 js中可以把變數分成兩部分,基本型別和引用型別。基本型別包括 undefined null boolean number和string 引用型別值可能由多個值構成的物件。在對基礎型別資料進行拷貝時,實際相當於建立新的相同資料 hello 賦值給b var a hel...

js 淺拷貝與深拷貝

js 有兩種資料型別,基礎資料型別和引用資料型別 基礎資料型別都是按值訪問的,我們可以直接操作儲存在變數中的實際的值。而引用型別如array,1.淺拷貝 只複製指向某個物件的指標,而不複製物件本身,新舊物件共享一塊記憶體 淺拷貝是指只複製一層物件,當物件的屬性是引用型別時,實質複製的是其引用,當引用...

js深拷貝與淺拷貝

實現乙個頁面或者乙個功能時,常常遇到的場景需要我們備份乙個陣列或者物件,這時候出現了深拷貝與淺拷貝效果截然不同呀總結如下 var arr 1,2,3,4 shallowarr arr arr 0 change console.log arr console.log shallowarr change...