手写深拷贝

273 阅读1分钟
function deepClone(obj) {  
   // 对函数的处理  
   if (typeof obj === 'function') return eval(obj.toString())
   // 对时间的处理
   if (Object.prototype.toString.call(obj) === [object Date]) return new Date(obj.getTime())
   // 对简单类型的处理  
   if (typeof obj !== 'object') return obj       
   // 对数组和对象的处理  
    var isArray = Array.isArray(obj)  
    var newObj = isArray ? [] : {}  

    // 进行循环遍历  
    if(isArray) {    
        for(var i = 0; i < obj.length; i++) {      
            newObj[i] = deepClone(obj[i])    
        }  
    }else {    
        for (const key in obj) {      
            if (object.hasOwnProperty(key)) {        
                newObj[key] = deepClone(obj[key])      
                }    
        }  
    }  
    return newObj
}