数组和对象的深拷贝和浅拷贝的方法

数组和对象的深拷贝、浅拷贝方法有所不同,以下是常见的实现方式:

一、浅拷贝方法(数组和对象通用/专用)

浅拷贝只复制表层数据,嵌套的引用类型仍共享内存。

  1. 数组的浅拷贝
  • 扩展运算符(...): const arrCopy = [...originalArr];

  • Array.prototype.slice(): const arrCopy = originalArr.slice();

  • Array.prototype.concat(): const arrCopy = [].concat(originalArr);

  1. 对象的浅拷贝
  • 扩展运算符(...): const objCopy = {...originalObj};

  • Object.assign(): const objCopy = Object.assign({}, originalObj);

二、深拷贝方法(数组和对象通用/专用)

深拷贝会复制所有嵌套数据,原数据和拷贝数据完全独立。

  1. 通用方法(数组和对象均可)
  • JSON.parse(JSON.stringify()):

简单易用,但有局限性(不支持函数、Symbol、循环引用等)。

示例: const deepCopy = JSON.parse(JSON.stringify(original));

  • 递归实现:

自定义函数遍历所有属性,对引用类型递归拷贝,可处理复杂场景。

示例:

function deepClone(obj) {

if (obj === null || typeof obj !== 'object') return obj;

let copy = Array.isArray(obj) ? [] : {};

for (let key in obj) {

if (obj.hasOwnProperty(key)) {

copy[key] = deepClone(obj[key]);

}

}

return copy;

}

  1. 其他工具方法
  • Lodash库的_.cloneDeep():

成熟可靠,支持各种数据类型(推荐实际开发使用)。

示例: const deepCopy = _.cloneDeep(original);

总结

  • 浅拷贝适合无嵌套的简单数据,实现简单(扩展运算符、slice等)。

  • 深拷贝适合有嵌套引用类型的数据,复杂场景推荐用 Lodash 的 _.cloneDeep ,简单场景可临时用 JSON.parse(JSON.stringify()) (注意其局限性)。

相关推荐
牧羊狼的狼4 小时前
React 中的 HOC 和 Hooks
前端·javascript·react.js·hooks·高阶组件·hoc
知识分享小能手5 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
魔云连洲5 小时前
深入解析:Vue与React的异步批处理更新机制
前端·vue.js·react.js
mCell6 小时前
JavaScript 的多线程能力:Worker
前端·javascript·浏览器
超级无敌攻城狮8 小时前
3 分钟学会!波浪文字动画超详细教程,从 0 到 1 实现「思考中 / 加载中」高级效果
前端
excel8 小时前
用 TensorFlow.js Node 实现猫图像识别(教学版逐步分解)
前端
gnip9 小时前
JavaScript事件流
前端·javascript
赵得C9 小时前
【前端技巧】Element Table 列标题如何优雅添加 Tooltip 提示?
前端·elementui·vue·table组件
wow_DG9 小时前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(一):响应式原理
前端·javascript·vue.js
weixin_456904279 小时前
UserManagement.vue和Profile.vue详细解释
前端·javascript·vue.js