深拷贝和浅拷贝

深拷贝

新的对象

实现方式

1.利用JSON.stringify将对象转成JSON字符串,再用JSON.parse把字符串解析成对象

javascript 复制代码
JSON.parse(JSON.stringify())

2.lodash的_.cloneDeep

3.手写递归循环

javascript 复制代码
function deepClone(obj, hash = new WeakMap()) {
  if (obj === null) return obj // 如果是null或者undefined我就不进行拷贝操作
  if (obj instanceof Date) return new Date(obj)
  if (obj instanceof RegExp) return new RegExp(obj)
  // 可能是对象或者普通的值  如果是函数的话是不需要深拷贝
  if (typeof obj !== "object") return obj
  // 是对象的话就要进行深拷贝
  if (hash.get(obj)) return hash.get(obj)
  let cloneObj = new obj.constructor()
  // 找到的是所属类原型上的constructor,而原型上的 constructor指向的是当前类本身
  hash.set(obj, cloneObj)
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 实现一个递归拷贝
      cloneObj[key] = deepClone(obj[key], hash)
    }
  }
  return cloneObj
}
相关推荐
南方者3 小时前
文心文心,其利锻心!这个古风射覆,它帅到我了!文心快码 3.5S
前端·敏捷开发·文心快码
永日456703 小时前
学习日记-CSS-day53-9.11
前端·css·学习
云枫晖3 小时前
JS核心知识-this的指向
前端·javascript
magnet3 小时前
用img标签渲染的svg VS 直接使用svg标签,有什么区别?
前端·html
ze_juejin3 小时前
createComponent的environmentInjector详解
前端
云舟吖3 小时前
基于 electron-vite 从零到一搭建桌面端应用
前端·架构
ze_juejin3 小时前
CSS backdrop-filter 属性详解
前端
不爱编程的小方3 小时前
响应式布局
前端·css3
前端康师傅3 小时前
JavaScript 函数高级用法
前端·javascript