摘要:只有對于復雜數(shù)據(jù)類型才有深淺拷貝一說粗淺的解釋淺拷貝并不是真的拷貝,新對象仍指向原被拷貝對象的內存地址,如有更新會被同步引用數(shù)據(jù)類型的名存在棧內存中,值存在于堆內存中,但是棧內存會提供一個引用的地址指向堆內存中的值深拷貝是完全拷貝出了獨立的
只有對于Object(復雜數(shù)據(jù)類型)才有深淺拷貝一說
1、粗淺的解釋:淺拷貝并不是真的拷貝,新對象仍指向原被拷貝對象的內存地址,如有更新會被同步
(引用數(shù)據(jù)類型(Object)的名存在棧內存中,值存在于堆內存中,但是棧內存會提供一個引用的地址指向堆內存中的值)
深拷貝是完全拷貝出了獨立的對象,一毛一樣
2、怎樣實現(xiàn)深拷貝 遞歸方式function deepClone(obj){ let objClone = Array.isArray(obj)?[]:{}; // 判斷是否為引用類型數(shù)據(jù) if(obj && typeof obj==="object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ //判斷ojb子元素是否為對象,如果是,遞歸復制 if(obj[key]&&typeof obj[key] ==="object"){ objClone[key] = deepClone(obj[key]); }else{ //如果不是,簡單復制 objClone[key] = obj[key]; } } } } return objClone; } let a=[1,2,3,4], b=deepClone(a); a[0]=2; console.log(a,b); // 2234 1234extend(jQuery方法)
$.extend( [ deep ], target, object1 [, objectN ] )
deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝
let a=[0,1,[2,3],4], b=$.extend(true,[],a); a[0]=1; a[2][0]=1; console.log(a,b);借用JSON對象的parse和stringify
利用JSON.stringify 將js對象序列化(JSON字符串),再使用JSON.parse來反序列化(還原)js對象;序列化的作用是存儲(對象本身存儲的只是一個地址映射,如果斷電,對象將不復存在,因此需將對象的內容轉換成字符串的形式再保存在磁盤上 )和傳輸(例如 如果請求的Content-Type是 application/x-www-form-urlencoded,則前端這邊需要使用qs.stringify(data)來序列化參數(shù)再傳給后端,否則后端接受不到)
function deepClone(obj){ let _obj = JSON.stringify(obj), objClone = JSON.parse(_obj); return objClone } let a=[0,1,[2,3],4], b=deepClone(a); a[0]=1; a[2][0]=1; console.log(a,b);
使用JSON做深拷貝時,被拷貝對象內如果有date、RegExp或者是function會出現(xiàn)一些問題
不懂的時候看看這個
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103764.html
摘要:本文解釋中深拷貝和淺拷貝的區(qū)別。深拷貝深拷貝指遞歸的復制對象的屬性給新對象。有些時候一層的深拷貝被認為是淺拷貝,比如的值是一個對象,淺拷貝出來的新對象直接引用了原對象的對象,所以也會相互影響的。 本文解釋javascript中深拷貝和淺拷貝的區(qū)別。 淺拷貝/Shallow Copy 淺拷貝指拷貝了引用值。 var original = {prop1 : Prop1, prop2 : p...
摘要:深拷貝和淺拷貝的區(qū)別背景最近在用框架寫頁面,賦值給中的對象時會出現(xiàn)一個問題,賦值和被賦值對象之中任何一個有變化,另一個也會隨之變化。 深拷貝和淺拷貝的區(qū)別 背景:最近在用vue框架寫頁面,賦值給Vue.$data中的對象時會出現(xiàn)一個問題,賦值和被賦值對象之中任何一個有變化,另一個也會隨之變化。例如: var b = { foo: 123 }; var vm = new Vue(...
摘要:關于深拷貝和淺拷貝從原理看淺拷貝拷貝一層,對象級別的則拷貝引用深拷貝拷貝多層,每個層級的屬性都會拷貝從現(xiàn)象看復制了,被修改后,隨變化而變化淺拷貝不變深拷貝深拷貝針對的復雜的類型數(shù)據(jù)如直接賦值的單層拷貝,如,雖然不受的影響,但是這也不算做 關于深拷貝和淺拷貝 從原理看: 淺拷貝:拷貝一層,對象級別的則拷貝引用 深拷貝:拷貝多層,每個層級的屬性都會拷貝 從現(xiàn)象看:A復制了B,B被修改后...
摘要:對于而言,情況可能會有點小復雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細微區(qū)別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...
摘要:對于而言,情況可能會有點小復雜,因為一切皆為對象,所以的普通賦值深拷貝和淺拷貝之間都是有細微區(qū)別的。二下的他們在中,對象的賦值和傳遞都是引用。 一、深拷貝與淺拷貝 ??深拷貝:賦值時值完全復制,完全的copy,對其中一個作出改變,不會影響另一個 ??淺拷貝:賦值時,引用賦值,相當于取了一個別名。對其中一個修改,會影響另一個 ??對于PHP而言,= 賦值時,普通對象是深拷貝,但對對象來說...
閱讀 8889·2021-11-18 10:02
閱讀 2578·2019-08-30 15:43
閱讀 2651·2019-08-30 13:50
閱讀 1363·2019-08-30 11:20
閱讀 2700·2019-08-29 15:03
閱讀 3623·2019-08-29 12:36
閱讀 926·2019-08-23 17:04
閱讀 613·2019-08-23 14:18