什麼是深拷貝
使用json.parse(json.stringify())是深拷貝
原理是josn物件中的stringify可以把乙個js物件序列化為乙個json字串,parse可以把json字串反序列化為乙個js物件,通過這兩個方法,也可以實現物件的深複製。但是這個方法不能夠拷貝函式。
缺點:
(1)如果物件裡有函式,函式無法被拷貝下來
(2)無法拷貝copyobj物件原型鏈上的屬性和方法
(3)當資料的層次很深,會棧溢位
其他深拷貝的方法
function fn(obj)
for(var key in obj)
//如果檢測某一項是乙個物件,就遞迴呼叫方法進行深拷貝
else}}
return newobj
}
缺點:
(1)無法保持引用
(2)當資料的層次很深,會棧溢位
淺拷貝:
什麼是淺拷貝
建立乙個新物件,這個物件有著原始物件屬性值的乙份精確拷貝。如果屬性是基本型別,拷貝的就是基本型別的值,如果屬性是引用型別,拷貝的就是記憶體位址 ,所以如果其中乙個物件改變了這個位址,就會影響到另乙個物件。
(簡單來說就是如果原始物件屬性值是基本型別不是引用型別,原物件和新物件無論誰做修改都不會影響彼此,但是如果原始物件屬性值存在引用型別,在新物件對引用型別進行修改的時候,會影響老物件的引用型別)1.第一種方法
function fn(obj)
for(var key in obj)
}return newobj
}
2.第二種方法object.assign()
方法用於將所有可列舉屬性的值從乙個或多個源物件複製到目標物件。它將返回目標物件。
let a = {}
let b = object.assign({}, a);
將a物件的可列舉屬性複製到了乙個空物件,然後返回目標物件賦值給b實現了淺拷貝3.第三種方法
展開運算子...
let a = {}
let b = 實現了淺拷貝4.第四種方法
使用array.from來複製乙個陣列,複製後的陣列是淺拷貝
let a = , let b =array.from(a);
淺拷貝 深拷貝和淺賦值 深賦值
include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...
賦值 淺拷貝 深拷貝
堆是動態分配記憶體,記憶體大小不一 棧是自動分配相對固定大小的記憶體空間,並由系統自動釋放 基本資料型別值是不可變的,比較是值的比較 基本資料型別,傳值。開闢乙個新的記憶體空間 js 基本資料型別,儲存在 棧 中,記憶體可以及時 引用型別值是可變的,比較是引用的比較,看其引用是否指向同乙個物件 引用...
深拷貝 淺拷貝 賦值
賦值 class teacher class student student s1 new student student s2 s1 s1 s2,指向的記憶體區域相同 拷貝 class teacher class student implement cloneable student s1 new...