JS前端基础:浅拷贝与深拷贝的核心区别 一、前言在 JavaScript 中数据分为基本数据类型和引用数据类型。像对象、数组这类引用类型数据赋值时不会直接拷贝数据本体而是拷贝内存地址。因此我们在开发中会遇到 浅拷贝 和 深拷贝 两种数据拷贝方式。很多新手经常踩坑修改新对象旧对象数据也跟着改变本质原因就是没有分清浅拷贝和深拷贝的区别。本文用最简单通俗的语言讲透浅拷贝、深拷贝的原理和核心差异。二、什么是浅拷贝核心定义浅拷贝只复制对象的指针地址不复制对象本身新旧对象共享同一块内存空间。浅拷贝并不会创建全新的数据内容只是把「原对象的内存地址」复制给新对象。简单理解两个变量共用同一个数据本体。浅拷贝特性●只拷贝第一层地址不递归拷贝深层数据●新对象和原对象 共享内存●修改新对象的属性原对象会同步变化●适合简单单层对象不适合嵌套复杂对象浅拷贝代码示例// 原对象let obj1 {name: “张三”,age: 18}// 浅拷贝只拷贝地址let obj2 obj1// 修改新对象obj2.name “李四”// 新旧对象全部改变console.log(obj1.name) // 李四console.log(obj2.name) // 李四可以清晰看到修改新对象原对象数据被污染这就是浅拷贝最大的问题。三、什么是深拷贝核心定义深拷贝完全复制并创建一个一模一样的全新对象开辟新的内存空间新旧对象不共享内存。深拷贝会彻底拷贝对象的所有层级数据不是拷贝地址而是真正复制一份全新的数据本体。简单理解复制一份完全独立的副本两者毫无关联。深拷贝特性●完全拷贝所有层级数据包括嵌套对象、嵌套数组●新旧对象 内存独立、互不干扰●修改新对象旧对象保持不变●适合复杂嵌套对象、后台列表数据拷贝深拷贝代码示例// 原对象let obj1 {name: “张三”,age: 18}// 深拷贝开辟新内存生成全新对象let obj2 JSON.parse(JSON.stringify(obj1))// 修改新对象obj2.name “李四”// 原对象不受影响console.log(obj1.name) // 张三console.log(obj2.name) // 李四四、浅拷贝与深拷贝核心区别重点内存机制不同浅拷贝复制指针地址新旧对象 共享同一块内存深拷贝复制完整数据创建新内存新旧对象 内存独立数据影响不同浅拷贝修改新数据原数据会被修改数据污染深拷贝修改新数据原数据完全不变互不影响拷贝层级不同浅拷贝仅拷贝第一层深层依旧是地址拷贝深拷贝递归拷贝所有层级彻底复制完整对象使用场景不同浅拷贝简单单层对象、临时数据读取深拷贝编辑表单、修改列表数据、嵌套复杂对象、防止原数据污染五、开发常见拷贝方法区分浅拷贝方法直接赋值、Object.assign()、扩展运算符 …单层属于浅拷贝深拷贝方法JSON.parse(JSON.stringify())、递归手写深拷贝、Lodash 工具库 cloneDeep六、总结浅拷贝只复制对象指针地址不复制对象本体新旧对象共享内存修改会互相影响深拷贝完整复制对象数据创建全新独立内存新旧对象互不干扰浅拷贝速度快但容易污染原数据深拷贝安全性高、适合业务数据处理开发中如果需要修改拷贝后的对象且不影响原数据必须使用深拷贝。

相关新闻

最新新闻

BQ28Z610-R1 BMS芯片深度解析:从保护机制到阻抗跟踪电量计量

BQ28Z610-R1 BMS芯片深度解析:从保护机制到阻抗跟踪电量计量

1. 项目概述:BQ28Z610-R1,一个电池管理系统的“瑞士军刀”在锂离子电池驱动的世界里,无论是你手中的智能手机、脚下的电动滑板车,还是路边的储能柜,其核心的安全与效能“大脑”都是一个被称为电池管理系统(…

2026/7/24 5:47:19
UE5蓝图通信三大方案深度对比:Cast、接口与事件分发器的性能与实战选择

UE5蓝图通信三大方案深度对比:Cast、接口与事件分发器的性能与实战选择

1. 项目概述:蓝图通信的“选择困难症”在UE5的蓝图世界里混迹久了,你肯定遇到过这样的场景:A蓝图里的一个变量变了,需要立刻通知B蓝图更新UI;或者玩家捡起一个道具,需要触发远处一个机关的反应。这时候&…

2026/7/24 5:47:19
py依赖在线下载,离线安装,制作docker镜像

py依赖在线下载,离线安装,制作docker镜像

docker rm -f demo_pipdocker run -d --name demo_pip --networkhost \ -v /opt/demo:/app/demo \ python:3.11.11 \ tail -f /dev/nulldocker exec -it demo /bin/bash cd /app/docker# 在线下载依赖包 pip install --no-cache-dir --upgrade pip \&& pip download …

2026/7/24 5:47:19
C++手搓傅里叶变换:从DFT到FFT的算法实现与工程实践

C++手搓傅里叶变换:从DFT到FFT的算法实现与工程实践

1. 项目概述:为什么要在C里手搓傅里叶变换?搞信号处理、图像分析或者音频编程的朋友,对傅里叶变换这个名字肯定不陌生。简单说,它就像一副“数学眼镜”,能把一个随时间变化的信号(时域)&#xf…

2026/7/24 5:47:19
C++性能优化实战:从数据结构到并发编程的十大核心技巧

C++性能优化实战:从数据结构到并发编程的十大核心技巧

1. 项目概述:从“能跑”到“飞驰”的C性能跃迁在C的世界里,写出一段能正确运行的代码,往往只是起点。真正的挑战在于,如何让这段代码在数据洪流和计算密集型任务面前,依然能“飞驰”起来。无论是高频交易系统里那毫秒必…

2026/7/24 5:47:19
超融合环境中启用AVX指令集导致系统挂载失败的解决方案

超融合环境中启用AVX指令集导致系统挂载失败的解决方案

1. 问题现象与背景分析最近在超融合架构环境中遇到一个典型问题:某台运行CentOS的虚拟机在修改CPU配置启用AVX指令集支持后,系统重启失败。通过journalctl -xe查看日志,发现报错集中在"/mnt/centos挂载失败"这个关键信息上。这个案…

2026/7/24 5:42:19

月新闻