深浅拷贝?

一、定义:

浅拷贝:只复制对象的第一层属性,若第一层属性是引用类型(如对象、数组),则复制其内存地址,修改拷贝后的嵌套对象会影响原对象。

深拷贝:递归复制对象的所有层级,生成完全独立的副本

二、浅拷贝实现

1.Object.assign()
javascript 复制代码
const obj = { a: 1, b: { c: 2 } }; 
const clone = Object.assign({}, obj); // 浅拷贝 
clone.b.c = 3; // 原对象的 b.c 也会变为 3 
console.log("obj: ", obj) 
console.log("clone: ", clone)
2.展开运算符
javascript 复制代码
const arr = [1, 2, 3]; 
const newArr = [...arr]; // 浅拷贝 
newArr[2] = 4; 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)
javascript 复制代码
const arr = [1, 2, { a: 3 }]; 
const newArr = [...arr]; // 浅拷贝 
newArr[2].a = 4; // 原数组的 { a: 3 } 变为 { a: 4 } 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

3.数组方法:slice, concat

slice:

javascript 复制代码
const arr = [1, 2, { a: 3 }]; 
const newArr = arr.slice(); // 浅拷贝 
newArr[2].a = 4 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

concat:

javascript 复制代码
const arr = [1, 2, { a: 3 }]; 
const newArr = arr.concat(); // 浅拷贝 
newArr[2].a = 4 
console.log("arr: ", arr) 
console.log("newArr: ", newArr)

三、深拷贝

1.JSON 方法
javascript 复制代码
const obj = { a: 1, b: { c: 2 } }; 
const clone = JSON.parse(JSON.stringify(obj)); // 深拷贝 
clone.b.c = 4 
console.log("obj", obj) 
console.log("clone", clone)

2.第三方库

javascript 复制代码
// Lodash 
const _ = require('lodash'); 
const clone = _.cloneDeep(obj);
相关推荐
程序员爱钓鱼19 分钟前
Go语言实战案例 — 项目实战篇:简易博客系统(支持评论)
前端·后端·go
excel7 小时前
ES6 中函数的双重调用方式:fn() 与 fn\...``
前端
可乐爱宅着8 小时前
全栈框架next.js入手指南
前端·next.js
你的人类朋友9 小时前
什么是API签名?
前端·后端·安全
会豪11 小时前
Electron-Vite (一)快速构建桌面应用
前端
中微子11 小时前
React 执行阶段与渲染机制详解(基于 React 18+ 官方文档)
前端
唐某人丶11 小时前
教你如何用 JS 实现 Agent 系统(2)—— 开发 ReAct 版本的“深度搜索”
前端·人工智能·aigc
中微子11 小时前
深入剖析 useState产生的 setState的完整执行流程
前端
遂心_12 小时前
JavaScript 函数参数传递机制:一道经典面试题解析
前端·javascript
小徐_233312 小时前
uni-app vue3 也能使用 Echarts?Wot Starter 是这样做的!
前端·uni-app·echarts