【web前端】用javascript實現物件的深複製

GetFullStack發表於2018-08-06
function deepClone(targetObject) {
    if (typeof targetObject !== 'object') return targetObject;
    
    if (targetObject === null) return null;
    if (targetObject instanceof Date) return new Date(targetObject);
    if (targetObject instanceof RegExp) return new RegExp(targetObject);
    
    let newObj = new targetObject.constructor();
    
    for(let key in targetObject) {
        newObj[key] = typeof targetObject[key] === 'object' ? deepClone(targetObject[key]) : targetObject[key];
    }
    return newObj;
}
複製程式碼

附件:javascript 判斷各種資料型別

typeof 2      //輸出   number
typeof null   //輸出   object
typeof {}    //輸出   object
typeof []    //輸出   object
typeof (function(){})   //輸出  function
typeof undefined        // 輸出  undefined
typeof '222'                // 輸出    string
typeof  true                  // 輸出     boolean
複製程式碼

看到這裡你肯定會問了:我怎麼去區分物件,陣列和null呢?

Object.prototype.toString.call

var   gettype=Object.prototype.toString
gettype.call('aaaa')        //輸出      [object String]
gettype.call(2222)         //輸出      [object Number]
gettype.call(true)          //輸出      [object Boolean]
gettype.call(undefined)  //輸出      [object Undefined]
gettype.call(null)                  //輸出   [object Null]
gettype.call({})                   //輸出   [object Object]
gettype.call([])                    //輸出   [object Array]
gettype.call(function(){})     //輸出   [object Function]
複製程式碼

相關文章