Typescript中的浅拷贝和深拷贝

在 TypeScript 中,浅拷贝和深拷贝是两种不同的对象复制方式,它们有不同的使用场景和效果。

1、浅拷贝 (Shallow Copy):

浅拷贝是指在复制对象时,只复制对象的第一层属性,而不会递归地复制嵌套对象的内部属性。浅拷贝后的对象和原对象共享同一组内部对象引用。

  • 使用场景:如果你希望两个对象之间共享某些引用类型的属性,可以使用浅拷贝。

  • 性能考虑:当对象的嵌套结构较深,而你只需要复制最外层对象时,可以使用浅拷贝来避免不必要的性能开销。

  • 示例:

css 复制代码
let originalObject = { 
  name: 'John', 
  age: 30, 
  address: { 
    city: 'New York', 
    country: 'USA' 
  } 
};

let shallowCopy = { ...originalObject };

2、深拷贝 (Deep Copy):

深拷贝是指在复制对象时,递归地复制对象的所有嵌套属性,包括内部的引用类型。深拷贝后的对象和原对象不共享任何内部对象引用。

  • 使用场景:当你希望复制对象及其所有嵌套属性,确保原对象和拷贝后的对象完全独立时,可以使用深拷贝。

  • 数据独立性:修改拷贝不影响原对象: 如果你需要修改拷贝后的对象而不影响原对象,深拷贝是必要的。

  • 示例:

css 复制代码
import { cloneDeep } from 'lodash';

let originalObject = { 
  name: 'John', 
  age: 30, 
  address: { 
    city: 'New York', 
    country: 'USA' 
  } 
};

let deepCopy = cloneDeep(originalObject);

在上述示例中,cloneDeep 函数来自于 lodash 库,它执行深拷贝操作。

总体来说,选择浅拷贝还是深拷贝取决于你的需求。如果你只关心对象的第一层属性,且希望性能更好,可以使用浅拷贝。如果你需要复制整个对象树,确保对象及其内部属性的独立性,那么应该使用深拷贝。

相关推荐
FungLeo8 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn9 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_10 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt10 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide11 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel11 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘12 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马12 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut12 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia12313 小时前
实现完整 Tool Dispatcher
开发语言·前端