如何进行深度克隆

173 阅读1分钟
function deepClone(oldObj) {
    //如果传入的对象是null。则返回null
    if(oldObj == null){
        return null;
    //利用typeof传入的是什么类型,如果不是对象或者数组,直接克隆当前对象返回
    } else if(typeof(oldObj) != 'object'){
        return oldObj;
    }
    //利用Array.isArray()API查看当前传入的对象是不是数组,如果是数组则创建空数组,如果不是则创建空对象
    var newObj = Array.isArray(oldObj) ? [] : {};
    //遍历传入的对象
    for(var key in oldObj){
        //把传入对象的属性和值,依次克隆到新对象 ,这里再次调用函数本身,就是为了进行深度克隆,如果传入的对象有引用类型的值,利用递归再次进行深入克隆
        newObj[key] = deepClone(oldObj[key]);
    }
    return newObj;
}