1. 程式人生 > >javascript物件深度克隆探索

javascript物件深度克隆探索

說到js裡的物件克隆,首先要了解js裡的資料型別有哪些:

1、number string boolean null undefined 基本型別,也叫原始型別

2、object array function 引用型別

對於以上兩種資料型別的克隆不相同,對於原始型別,我們可以直接用等號賦值克隆,而對於引用型別,由於實際內容存放在記憶體中,不能直接用等號賦值克隆(如果這樣賦值,那兩個物件其實指向記憶體中的同一地址)

在完成深度克隆的方法之前,我們還需瞭解js中判斷物件是哪種基本型別的方法,

我這裡採用Object.prototype.toString.call()的方法:

function getObjClass(obj) {                  return  Object.prototype.toString.call(obj).slice(8, -1);             }

            function deepClone(obj) {                 var result;                 var objClass = getObjClass(obj);

                //避免返回錯誤的型別                 if(objClass == 'Object') {                     result = {};                 } else if(objClass == 'Array') {                     result = [];                 } else {                     return obj; //基本型別的物件直接淺拷貝完成                 }                 for(key in obj) {                     var o = obj[key];                     var oClass = getObjClass(o);                     if(oClass == "Object"||oClass == "Array") {                         result[key] = arguments.callee(o); //遞迴呼叫                     }else {                         result[key] = o;                     }                 }                 return result;             }