关于JS的深度克隆

我们都知道对象分为深度克隆和浅度克隆,深度克隆是把属性和值全部都克隆成为另一个整体,而浅度克隆只是克隆对象的引用地址,引用地址还是相同的,不会发生变化。例如

对象的浅克隆

 let obj={
         name:'ligo',
         age:18
     }
     let obj2=Object.assign(obj)

       obj2.work='study'

       console.log(obj,obj2)  //obj {age: 18,name: "ligo",work: "study"}  obj2{age:18,name: "ligo",work: "study"}
       console.log(obj===obj2)  //true

对象的深度克隆

  function deepClone(target) {
        //判断类型是否为obj
        let result;
        if (typeof target === 'object') {
            //判断是否为数组
            if (Array.isArray(target)) {
                result = []
                for (let key in target) {
                    result =result.push( deepClone(target[key]))
                }
            } else {
                result = {}
                for (let key in target) {
                    result[key] = deepClone(target[key])
                }
            }
        } else {
            result = target
        }

        return result

    }

    let obj = {
        name: 'ligo',
        age: '18'
    }
    let obj2 = deepClone(obj)

       obj2.work='study'
       console.log(obj2,obj)   //obj {age: 18,name: "ligo"}  obj2{age: 18,name: "ligo",work: "study"}

       console.log(obj2===obj) //false

在深度克隆中,被克隆的obj属性的改变不会影响obj,因为obj2和obj的引用不是同一个,相当于是一个独立的整体。而浅度克隆obj2的改变会影响到obj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值