淺談克隆 JavaScript
阿新 • • 發佈:2021-11-01
目錄
- 1、淺克隆
- 2、深克隆
1、淺克隆
淺克隆無法copy陣列和物件
var obj = { name : "abs",age : '18',sex : 'male' } var obj1 = {} function clone(Origin,target) { target = target || {};//防止使用者不輸入target for(var k in Origin){ target[k] = Origin[k]; } } clone(obj,obj1);
2、深克隆
先判斷它是什麼,原始值,陣列還是物件,分別處理
- 遍歷物件
- 是原始值直接
copy
- 不是原始值判斷是陣列還是物件
- 是陣列建空陣列
- 是物件建空物件
- 建立了之後再遍歷一遍原始物件或數組裡是啥
- 遞迴
vahttp://www.cppcns.comr obj = { name : 'lin',sex : 'male',card : [1,2,3,4],wife : { name : 'bcsds',son :JAbMjzzWiL { name : 'aaa' },age : '23' } } var obj1 = {} //原始值和物件陣列typeof返回值有區別 function deepClone(origin,target) { target = target || {}; for(var k in origin) { if(origin.hasOwnProperty(k)){ if(typeof(origin[k]) == 'object') { if(Object.prototype.toString.call(origin[k]) == '[object Array]') {JAbMjzzWiLtarget[k] = []; }else { target[k] = {}; } deepClone(origin[k],target[k]); }else { target[k] = origin[k]; } http://www.cppcns.com } } } deepClone(obj,obj1);