JavaScript的深拷贝

108 阅读1分钟

前言

今天上网查了下js对于对象类型数据深拷贝的方法,写下此文以便复习

浅拷贝

浅说一下为什么要有深拷贝嘛,在我的认知下是js的引用数据类型,当对其进行克隆时,只是重新定义了一个指针,引用类型数据存储在堆中,这两个指针指向的是堆中的同一个地址,所以对其中一个对象的值进行修改,那么另一个值也会修改,这时候就给可以将对象中的键遍历出来放到新的对象中解决

深拷贝

那如果对象中还包含另一个对象,浅拷贝就不足以满足我们的需求,所以就可以使用深拷贝,通过查阅资料,我找到了下面的这种方式

 let deepCopy = (obj) => {
        if (typeof obj !== 'object') return
        let newObj = Array.isArray(obj) ? [] : {}
        for (let key in obj) {
          if (obj.hasOwnProperty(key)) {
            newObj[key] =
              typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]
          }
        }
        return newObj
      }

感觉这个方法封装的还是比较完善,也可能有更好的方法,欢迎大家评论指点哦