深浅拷贝?

一、定义:

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

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

二、浅拷贝实现

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);
相关推荐
李永奉35 分钟前
C语言-指针初级(指针定义、指针的作用、指针的计算、野指针、悬空指针、void类型指针)
c语言·开发语言
Full Stack Developme36 分钟前
Java 日期时间处理:分类、用途与性能分析
java·开发语言·数据库
2301_793086875 小时前
JVM 01 运行区域
java·开发语言
愤怒的小鸟~~~5 小时前
c语言创建的一个队列结构(含有这个头指针和这个尾指针的结构具有一定的参考价值)
c语言·开发语言·算法
我不吃饼干7 小时前
在 React 中实现倒计时功能会有什么坑
前端·react.js
鹿野素材屋7 小时前
C#中对于List的多种排序方式
开发语言·c#
小小小小宇7 小时前
前端PerformanceObserver
前端
whxnchy7 小时前
C++刷题 - 7.27
开发语言·c++
王者鳜錸7 小时前
PYTHON从入门到实践-18Django从零开始构建Web应用
前端·python·sqlite
拾光拾趣录7 小时前
ES6到HTTPS全链路连环拷问,99%人第3题就翻车?
前端·面试