当前位置: 首页 > wzjs >正文

爱站工具有加超人下拉系统优化培训方式

爱站工具有加超人下拉系统,优化培训方式,重庆观音桥步行街,选择建设网站公司要注意什么js 对象深拷贝 今天遇到一个bug ,子组件页面修改了内容,但是按了取消保存按钮,没有将数据传回父组件的,但是父组件的数据改了,原因是通过子组件接受父组件的参数对象层级深没有做深拷贝的原因。 在 JavaScript 中&…

js 对象深拷贝


今天遇到一个bug ,子组件页面修改了内容,但是按了取消保存按钮,没有将数据传回父组件的,但是父组件的数据改了,原因是通过子组件接受父组件的参数对象层级深没有做深拷贝的原因。

在 JavaScript 中,深拷贝是指复制一个对象及其所有嵌套对象的完整副本,而不是仅仅复制引用。以下是几种实现深拷贝的方法:

方法 1:使用 JSON.parseJSON.stringify

这是最简单的方法,但有一些限制(例如,无法拷贝函数、undefinedSymbol 等)。

const obj = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(obj));console.log(deepCopy); // { a: 1, b: { c: 2 } }

注意

  • 无法拷贝函数、undefinedSymbol
  • 不支持循环引用。

方法 2:使用递归实现深拷贝

手动实现一个递归函数来处理对象和数组。

function deepClone(obj) {if (obj === null || typeof obj !== "object") {return obj; // 基本类型直接返回}// 创建一个新对象或数组const copy = Array.isArray(obj) ? [] : {};for (const key in obj) {if (obj.hasOwnProperty(key)) {copy[key] = deepClone(obj[key]); // 递归拷贝}}return copy;
}const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = deepClone(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

方法 3:使用 lodash

lodash 是一个流行的 JavaScript 工具库,其中的 cloneDeep 方法可以轻松实现深拷贝。

import _ from "lodash";const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = _.cloneDeep(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

优点

  • 支持复杂对象(如循环引用)。
  • 可靠且易用。

方法 4:使用 structuredClone(现代浏览器支持)

structuredClone 是一种原生方法,用于深拷贝对象。

const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = structuredClone(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

优点

  • 支持循环引用。
  • 原生方法,性能较好。

注意

  • 仅在现代浏览器和 Node.js 17+ 中支持。

方法 5:使用 Object.create 和递归

通过 Object.create 创建新对象,并递归拷贝属性。

function deepClone(obj) {if (obj === null || typeof obj !== "object") {return obj;}const copy = Object.create(Object.getPrototypeOf(obj));for (const key of Object.keys(obj)) {copy[key] = deepClone(obj[key]);}return copy;
}const obj = { a: 1, b: { c: 2 }, d: [3, 4] };
const deepCopy = deepClone(obj);console.log(deepCopy); // { a: 1, b: { c: 2 }, d: [3, 4] }

总结

  • 简单对象:可以使用 JSON.parse(JSON.stringify(obj)
  • 复杂对象:推荐使用 lodash.cloneDeepstructuredClone
  • 自定义实现:可以使用递归函数处理特殊需求。
http://www.dtcms.com/wzjs/191759.html

相关文章:

  • 电子商务网站建设与管理课程的目的深圳百度seo整站
  • 陕西党建网站两学一做常态化关键词工具网站
  • 有经验的高密网站建设营销策划的十个步骤
  • 苏州网站建设科技有限公司网络营销的策划方案
  • 阳谷企业做网站推广微信公众号推广2元一个
  • 中国纪检监察报是日报还是周报百度seo排名规则
  • 公众号开发网站成都网络营销推广
  • 帮企业做网站赚钱福州短视频seo
  • wordpress房产西安seo排名扣费
  • 闵行网站建站多少钿网站收录提交入口网址
  • 企业网站维护合同上海做网络口碑优化的公司
  • 做网站公司圣辉友联排名首页服务热线
  • 哪个网站做刷手最好免费站长工具
  • 跨境电商网站制作推广策划方案怎么写
  • b站短链接生成竞价托管运营哪家好
  • 北京网站建站公手机如何制作网站
  • 上虞网站建设baidu培训机构招生方案范文
  • 如何做公司建网站方案给公司考研培训机构排名前十
  • 手机版网站开发实例济南新站seo外包
  • 做电影网站需要什么软件seo站长工具查询系统
  • 国外医疗网站模板手机优化大师怎么退款
  • vps如何做网站步骤百度手机助手免费下载
  • 桂林做网站公司个人网页制作教程
  • 潍坊 开发区网站建设企业管理培训免费课程
  • 锋创科技园网站建设杭州网站seo推广
  • 分辨率大于1920的网站怎么做模板建网站价格
  • 网监大队让网站备案鹤壁seo
  • 通州建设网站河北企业网站建设
  • 360易托管建站工具seo观察网
  • 重庆网站建设公司咨询亿企帮百度度小店申请入口