如何实现JavaScript中的深拷贝与浅拷贝技巧?

2026-04-27 17:310阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1051个文字,预计阅读时间需要5分钟。

如何实现JavaScript中的深拷贝与浅拷贝技巧?

JavaScript中的浅拷贝(shallow copy)仅复制对象或数组的顶层属性,对于嵌套的引用类型(如对象、数组)仅复制指针,新旧对象共享同一块内存。常见错误包括使用Object.assign()或展开运算符[...arr],这只能完全隔离数据,修改深层属性时,原始数据也会被意外改变。

适用场景:只需隔离顶层字段,且确定内部结构不会被后续修改;或作为性能敏感场景下的临时方案。

  • Object.assign({}, obj) 对对象有效,但不处理 nullundefined 或原型链
  • [...arr]Array.from(arr) 适合一维数组,对含对象的数组无效
  • structuredClone() 是现代浏览器推荐方式,但目前不支持函数、undefinedSymbol 和循环引用

深拷贝必须递归或序列化处理嵌套结构

真正意义上的深拷贝需确保所有层级的引用类型都生成独立副本。没有银弹方案,选择取决于环境限制和数据特征。

最稳妥的手写递归实现要处理:null、日期、正则、数组、普通对象、Map/Set 等类型,还要避免循环引用导致栈溢出。但多数项目中,更倾向用成熟方案降低维护成本。

阅读全文

本文共计1051个文字,预计阅读时间需要5分钟。

如何实现JavaScript中的深拷贝与浅拷贝技巧?

JavaScript中的浅拷贝(shallow copy)仅复制对象或数组的顶层属性,对于嵌套的引用类型(如对象、数组)仅复制指针,新旧对象共享同一块内存。常见错误包括使用Object.assign()或展开运算符[...arr],这只能完全隔离数据,修改深层属性时,原始数据也会被意外改变。

适用场景:只需隔离顶层字段,且确定内部结构不会被后续修改;或作为性能敏感场景下的临时方案。

  • Object.assign({}, obj) 对对象有效,但不处理 nullundefined 或原型链
  • [...arr]Array.from(arr) 适合一维数组,对含对象的数组无效
  • structuredClone() 是现代浏览器推荐方式,但目前不支持函数、undefinedSymbol 和循环引用

深拷贝必须递归或序列化处理嵌套结构

真正意义上的深拷贝需确保所有层级的引用类型都生成独立副本。没有银弹方案,选择取决于环境限制和数据特征。

最稳妥的手写递归实现要处理:null、日期、正则、数组、普通对象、Map/Set 等类型,还要避免循环引用导致栈溢出。但多数项目中,更倾向用成熟方案降低维护成本。

阅读全文