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

网上购物商城网站建设/西安seo王

网上购物商城网站建设,西安seo王,贵阳网站开发哪家好,合肥广告公司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.whsansanxincailiao.cn/news/30283842.html

相关文章:

  • 网站seo插件/电商网站销售数据分析
  • 帮人做网站/湖南网络推广服务
  • 天津网站建设方案外包/新媒体营销案例
  • 广州做礼物的网站/云搜索
  • 哪里可以学做网站/windows优化大师靠谱吗
  • 项目网站建设方案/seo点击
  • 西安高端网站建设/软文广告经典案例300字
  • 成品网站好吗/百度问答seo
  • 怎么开网站做网红/视频外链在线生成
  • 怎么找到网站的空间服务商/seo属于什么职业部门
  • 电脑网站怎么制作/seo搜索引擎优化实战
  • 网站建设设计 网络服务/做网站优化的公司
  • 免费全国网站在线客服软件/专注于品牌营销服务
  • 做rom网站/培训总结精辟句子
  • 平邑网站开发/温州seo外包公司
  • 做网站不需要原件吧/整站优化关键词排名
  • 桂林论坛网app/北京外包seo公司
  • 家庭带宽100m做网站/如何建造自己的网站
  • 宁波专业品牌网站制作外包/谷歌网站推广优化
  • 长治做百度网站一年多少钱/百度快速优化软件
  • 什么网站可以做章/男生和女生在一起探讨人生软件
  • 网站的小图标怎么做的/找营销推广团队
  • 公司门户网站建设策划书/竞价账户托管的公司有哪些
  • 厦门网站建设哪家不错/seo排名优化网站
  • 苏州网站建设相关技术/快手流量推广网站
  • 免费试用平台网站源码/百度关键词刷搜索量
  • 株洲第三方网站建设哪家好/google seo
  • 奶茶店加盟网站建设/惠州seo排名外包
  • wordpress好友添加/抖音seo公司
  • 外贸建网站哪家好/seo是什么意思为什么要做seo