深拷貝與淺拷貝的區別,實現深拷貝的幾種方法

2021-09-01 13:01:33 字數 1462 閱讀 1968

原博位址​​​​​​​

如何區分深拷貝與淺拷貝,簡單點來說,就是假設b複製了a,當修改a時,如果b也跟著變了,說明這是淺拷貝,拿人手短,如果b沒變,那就是深拷貝,自食其力。

主要原因是不同的資料型別,在記憶體中的儲存方式不同,棧堆基本資料型別引用資料型別。

變數和 值都存在棧中,當b複製了a,就是把這個關係複製了乙份

因為深拷貝本身只針對較為複雜的object型別資料。

//基本資料型別

var a=2;

b=a;

console.log(a)//2

console.log(b)//2

a=3;

console.log(a)//3

console.log(b)//2

//淺拷貝,因為複製的是引用

let arr=[2,3,4,5];

let arr1=arr;

arr[0]=10;

console.log(arr)//[10,3,4,5]

console.log(arr1)//[10,3,4,5]

實現深拷貝的幾種方法:

這麼我們封裝乙個深拷貝的函式

function deepclone(obj);

if(obj && typeof obj==="object")else}}

}return objclone;

}

let a=[1,2,3,4],

b=deepclone(a);

a[0]=2;

console.log(a,b);

function deepclone(obj)    

let a=[0,1,[2,3],4],

b=deepclone(a);

a[0]=1;

a[2][0]=1;

console.log(a,b);

$.extend( [deep ], target, object1 [, objectn ] )

deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝

targetobject型別 目標物件,其他物件的成員屬性將被附加到該物件上。

object1  objectn可選。 object型別 第乙個以及第n個被合併的物件。

let a=[0,1,[2,3],4],

b=$.extend(true,,a);

a[0]=1;

a[2][0]=1;

console.log(a,b);

淺拷貝與深拷貝的區別。如何實現深拷貝。

關於拷貝應該是大家面試中經常被問到的問題,特此總結一下,為以後積累經驗。鞏固拷貝之前必須先回顧下資料的分類,知道其儲存的位置。基本資料型別 1 分類 string number boolean undefined null symbol 2 特點 資料存在棧記憶體中 引用資料型別 1 分類 obje...

js深拷貝與淺拷貝區別,如何實現深拷貝

首先我們需要弄清楚什麼是淺拷貝,其實我個人覺得淺拷貝從性質上和事件冒泡一樣,當出現這種事件時就代表出問題了 首先要看看js資料的儲存空間 按儲存空間我們可以簡單將js資料分為兩大類 基礎變數,整個存在棧中。還有一種是匯入型別 例如 陣列 json物件 null等 他們的 名相當於乙個指標,而真正的變...

前端的深拷貝和淺拷貝 深拷貝與淺拷貝的區別

淺拷貝的方式 淺拷貝1 var obj var newobj obj newobj.name 李四 console.log obj console.log newobj 淺拷貝2 object.assgin 引數1 目標物件 引數2 任意多個物件 如果物件是多層的話 var obj var obj1...