深拷贝和浅拷贝

深拷贝

新的对象

实现方式

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
}
相关推荐
用户921080262861 分钟前
为什么 Header 是 HTTP 的灵魂
前端
特立独行的猫A2 分钟前
AtomMQTT Broker — 用 Rust 实现的轻量级高性能 MQTT 消息代理
前端·后端·架构
IMPYLH5 分钟前
HTML 的 <s> 元素
前端·html
lhldsg5 分钟前
折扣卡CPS小程序定制全流程实战指南:从需求分析到上线部署
java·前端·小程序
计算机魔术师18 分钟前
Lambert 算了一笔账:CUDA 绑定开源生态,每年值 100 亿美元
前端
晴天1623 分钟前
HTML iframe 标签全面解析:原理、属性、实战场景与最佳实践
前端·html·状态模式
parade岁月27 分钟前
倒反天罡!押注 React Native 6 年后,Shopify 又回到了原生开发
android·前端·ios
柚稚姐姐28 分钟前
npm install pnpm -g npm error code EACCES npm error syscall symlink
前端·npm·node.js
涛涛ing32 分钟前
2026 年,你可以从项目中删掉这 5 个 npm 包了
前端