之前踩過一些複製的坑,現在總結一下記錄下來,供以後開發時參考,相信對其他人也有用。
淺複製:一般用object.assign,如果支援es6的話也可以用新語法:
const obj = ;
//可以用object.assign
const obj2 = object.assign({}, obj1);
//es6的解構
const obj2 = ;
//其實下面這種寫法也可以,但是建議使用上面的寫法
const = obj;
深複製:建議用json.parse和json.stringify方法。
const obj = ;
const obj2 = json.parse(json.stringify(obj));
在如下2種情況下不要用上面的方法:
物件太大了。由於效能關係,耗時太長。
物件不是json不變的,也就是說,json.parse(json.stringify(obj)) != obj。
碰到這2中情況,還是老老實實用遞迴吧。
淺複製:有很多種方法,不過一般用slice:
const a = [2, 3, 5];
//下面的b,c,d都實現了淺複製
const b = a.slice();
const c = a.concat();
const d = [ ...a ];
深複製:這個最好用庫的方法。
使用$.extend方法。
const x = },
c: [ 1, 2, 3 ]
};const y = $.extend({}, x), //淺複製
z = $.extend(true, {}, x); //深複製
複製陣列和物件的時候一定要注意是不是淺複製。如果只想深複製陣列或物件的部分內容,可以先深複製整個物件,再淺複製得到的物件。(如果要效能的話,也可以看情況手動優化。) 淺複製和深複製
在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...
深複製和淺複製
以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...
深複製和淺複製
main.m 深複製和淺複製。created by yaomars on 16 4 27.import 建立乙個nsdictionary,並建立可變副本和不可變副本,說下是深複製還是淺複製。int main int argc,const char argv 第三種方式 建立乙個nsdictionar...