恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

JavaScript 深拷贝和浅拷贝有什么区别?structuredClone 能替代 JSON 拷贝吗?

  • 首页
  • 资讯中心
  • /
  • JavaScript 深拷贝和浅拷贝有什么区别?structuredClone 能替代 JSON 拷贝吗?

相关资讯

工业上位机实战:工控机选型、KEPServerEX采集与MySQL存储全解析 2026/10/14 3:37:57
你的p值很“显著”,但审稿人问的是“所以呢”:毕夏AI官网 www.bixiaai.com 在做的是“让数字通过学术法庭” 2026/10/14 3:37:57
机会成本思维模型:决策框架与实战应用 2026/10/14 3:37:57

最新资讯

构建数学解题Agent:从LLM局限到工具调用与验证优先架构
C++类型转换详解:原理、实践与陷阱
B2B电商平台银联电子支付实战接入指南
Rabbit health check failed排查:从健康检查原理到连接配置修复
亲测2026最新10款免费降ai率工具(附工具优缺点对比图)
MySQL复合查询实战:JOIN、子查询与HAVING的正确打开方式

今日推荐

IBM Verify Identity Access 修复 22 个漏洞:两个 9.8 严重 RCE 无需认证
小区物业管理系统
小型超市仓库管理系统

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

JavaScript 深拷贝和浅拷贝有什么区别?structuredClone 能替代 JSON 拷贝吗?

发布时间:2026/10/14 3:37:57
JavaScript 深拷贝和浅拷贝有什么区别?structuredClone 能替代 JSON 拷贝吗? JavaScript 深拷贝和浅拷贝有什么区别structuredClone 能替代 JSON 拷贝吗浅拷贝会创建新的外层对象但里面的嵌套对象通常还是原来的引用。因此修改副本的嵌套数据可能影响原对象。深拷贝会继续复制内部可复制的数据让副本和原对象分开。不过不同方法能处理的类型不同不能把深拷贝理解成所有对象都能原样复制。JSON 往返适合本来就属于 JSON 数据的数据结构。Date、undefined、函数、BigInt 和循环引用都需要额外注意。structuredClone 支持更多结构化数据也能处理循环引用但不能复制函数、DOM 节点等对象。实际项目里表单草稿可以复制数据数据库连接、事件监听或带行为的实例通常应该重新创建或保留明确引用。Python 可以使用 copy.copy 和 copy.deepcopy但它们的对象规则与 JavaScript 的 structuredClone 不相同。外层对象变了里面的数据为什么还连在一起先给表单草稿找一个清楚的例子假设页面允许修改用户资料原数据里有 profile.address.city。咱们希望编辑草稿时原数据先保持不变点击保存后再提交。如果只写 draft {…profile}外层确实是新对象但 draft.address 与 profile.address 仍然指向同一个地址对象。修改 draft.address.city原数据也跟着变。所以判断是否复制成功不能只检查 draft ! profile。还要检查需要隔离的嵌套引用以及修改后的实际结果。用两种语言看外层复制和内部复制下面只使用普通嵌套数据表达相同的隔离目标。JavaScript 用 structuredClonePython 用 deepcopy两者并不承诺支持完全相同的对象类型。TypeScriptconstoriginal{address:{city:Hangzhou}};constshallow{...original};constdeepstructuredClone(original);shallow.address.cityShanghai;console.log(original.address.city);// Shanghaideep.address.cityBeijing;console.log(original.address.city);// ShanghaiPythonfromcopyimportcopy,deepcopy original{address:{city:Hangzhou}}shallowcopy(original)deepdeepcopy(original)shallow[address][city]Shanghaiprint(original[address][city])# Shanghaideep[address][city]Beijingprint(original[address][city])# Shanghai第一次修改经过共享引用第二次修改发生在隔离后的地址对象上。这里用结果确认了区别。JSON 复制为什么不适合作为通用工具JSON 只能表达它支持的那套数据。日期可能变成字符串对象属性中的 undefined 和函数可能被省略数组中部分不支持的值会变成 null。BigInt 和循环引用还可能直接导致序列化失败。这不代表 JSON 不好。假设服务端返回的就是已经定义好的 JSON 结构复制或传输这种结构可以很直接。但如果咱们要复制的是页面状态、类实例或者工具对象先通过 JSON 改写一遍数据含义再声称复制成功就容易把问题藏起来。循环引用和共享关系也需要保留假设对象 a 的 self 指向 a 自己。正确的副本 b其 self 应当指向 b而不是原对象 a。还有一种更容易漏掉的情况original.left 与 original.right 原本指向同一个对象。结构化复制可以在副本内部保留这个共享关系同时与原对象分开。递归函数如果每次都盲目复制很可能无限循环或者把原来同一个对象复制成两个不相关对象。通常需要记录“这个源对象已经对应哪个副本”。Python deepcopy 也通过 memo 处理相应关系用户定义类还可能自定义复制行为。对于资源句柄和带行为的对象先判断是否应该复制比把递归写得更深更重要。本题机制参考MDN structuredClone、Python copy。面试官继续追问structuredClone 会完整保留自定义类实例吗不能这样承诺。自定义原型、属性描述符等信息不按任意对象原样保留需要对象的行为时应按该类的规则重新构建或提供明确的复制方法。深拷贝越彻底越安全吗也不一定。大对象复制会增加时间和内存原本应该共享的配置或资源也可能被误拆开。不可变更新可以只复制发生变化的路径。transfer 和 clone 有什么不同可转移对象可以移交底层资源原资源会失去相应可用性。它是所有权转移不是多保存一份不能当成普通复制随便打开。面试速记卡浅拷贝外层新对象嵌套引用可能继续共享。深拷贝需要隔离内部数据也要保留副本内部的关系。JSON适合 JSON 数据不能通用复制对象。structuredClone支持更多数据与循环引用仍有类型限制。验收检查身份与实际修改结果不只比较外层对象。我是程序员Sunday。本文收录于 sunday面试指南原文与配图可继续阅读。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号