浅入了解JavaScript的浅拷贝和深拷贝

209 阅读1分钟

JavaScript可以按照两种数据类型来区别。

  • 一种是基本数据类型(String,Number,Boolean,Undefined,Null,Symbol)

  • 一种是引用数据类型(Object,Array,Function)。

无论是浅拷贝,还是深拷贝都是针对于引用数据类型,因为基本数据类型可以直接赋值。

浅拷贝和深拷贝的区别在于,浅拷贝修改原数据的值后,拷贝的对象会随着发生改变,而深拷贝不会。

**浅拷贝**

最简单的浅拷贝可以使用Object.assign(target,sourse)
eg1:
let obj1={a:1,b:2};
let obj2=Object.assign({},obj1);
console.log(obj1)
eg2:
当然也可以使用扩展运算符...
let obj1={a:1,b:2};
let obj2={...obj1};
eg3:
可以使用常规的方法
function clone(target){
    let result={};
    if(typeof target !=='object') return
    for(let i in target){
        result[i]=target[i]
    }
    return result
}

**深拷贝**

最简单的深拷贝可以使用JSON.parse(JSON.stringify(object);
当然也可以使用递归
function deepClone(target){
    if(typeof target !=='object') return
    let result={}
    for(let i in target){
        if(target.hasOwnProperty[i]){
            if(typeof target[i]==='object'){
                result[i]=deepClone(target[i])
            }else{
                result[i]=target[i]
            }
        }
    }
    return result
    
}
以上时候最简单的深拷贝,但是有些不足,比如对于数组,Map,Set等类型无法做到拷贝。

以上只是浅入了解,真的是浅入了解。