如何在JS中克隆对象

在JavaScript中,克隆对象并不是直接支持的操作,因为JavaScript中的对象是通过引用传递的,而不是通过值传递。但是,你可以使用几种不同的方法来"克隆"或"复制"一个对象。

1. 浅拷贝(Shallow Copy)

浅拷贝只复制对象的顶层属性,如果属性是引用类型(如数组或对象),则复制的是引用的地址,而不是真正的对象。

使用展开运算符(Spread Operator):

javascript

let obj1 = { a: 1, b: { c: 2 } };

let obj2 = { ...obj1 };

使用Object.assign():

javascript

let obj1 = { a: 1, b: { c: 2 } };

let obj2 = Object.assign({}, obj1);

 

2. 深拷贝(Deep Copy)

深拷贝会递归地复制对象的所有层级。对于包含循环引用的对象,深拷贝可能会导致问题。

使用JSON.parse()和JSON.stringify():

注意:这种方法不能处理函数和循环引用,并且会丢失对象的undefined、Symbol、Function等类型的属性,因为JSON.stringify()在序列化这些值时会将它们忽略或转换为null。

javascript

let obj1 = { a: 1, b: { c: 2 } };

let obj2 = JSON.parse(JSON.stringify(obj1));

 

使用库(如lodash的_.cloneDeep()):

javascript

复制

let _ = require('lodash');

let obj1 = { a: 1, b: { c: 2 } };

let obj2 = _.cloneDeep(obj1);

 

3. 手动实现深拷贝

你也可以手动实现深拷贝函数,但这需要递归地检查对象的每个属性,并确定是否需要进一步复制。这通常比使用库更复杂,但在某些情况下可能是必要的(例如,当你需要处理Function类型的属性时)。

 

请注意,无论你选择哪种方法,都应该了解每种方法的限制和潜在问题,并根据你的具体需求来选择最适合的方法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二手车经营效率罗盘,用经营效率罗盘玩转二手车生意

课程下载:https://download.csdn.net/download/m0_66047725/89292198 更多资源下载:关注我。 带你了解不一样的二手车圈让二手车经营更高效 课程介绍 随着时代不断发展,二手车行业迎来了快速变革期。二手车有着一车一况、一车一价非标和价…

无人机+飞行服务:无人机飞防服务(打药+施肥+播种)技术详解

无人机飞防服务,结合了先进的无人机技术与农业实践,为现代农业提供了高效、精准的打药、施肥和播种解决方案。以下是对这些技术的详细解析: 一、无人机打药技术 无人机打药技术利用无人机搭载喷雾设备,对农田进行精准施药。通过…

【数仓系列】maxcompute、postgresql、sparksql等行转列数据处理实战总结(其他类型持续总结更新)

1.熟悉、梳理、总结项目研发实战中的SQL开发日常使用中的问题、经验总结,都是常用的开发技能,可以省去很多时间,时间长就忘记了 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.maxcompu…

关于java.nio.file 包--用于文件和文件系统操作的核心包之一

java.nio.file 包是 Java 中用于文件和文件系统操作的核心包之一。这个包提供了许多类和接口,用于在 Java 虚拟机中访问文件、管理文件属性和操作文件系统。主要的功能包括: 1.访问文件和目录: java.nio.file.Files 类提供了许多静态方法,用于…

【Crypto】看我回旋踢

文章目录 一、看我回旋踢二、知识点什么是ROT13?工作原理分析字符串格式 解题感悟 一、看我回旋踢 关键词回旋,盲猜ROT13 因为以 synt{ 开头,并以 } 结束,基本可以判断是ROT13 小小flag,拿下! 二、知识点 …

抖音极速版:抖音轻量精简版本,新人享大福利

和快手一样,抖音也有自己的极速版,可视作抖音的轻量精简版,更专注于刷视频看广告赚钱,收益比抖音要高,可玩性更佳。 抖音极速版简介 抖音极速版是一个提供短视频创业和收益任务的平台,用户可以通过观看广…

leetcode-560 和为k的数组

一、题目描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 注意:nums中的元素可为负数 输入:nums [1,1,1], k 2 输出:2输入:num…

装饰乙级资质延期申请的注意事项

在申请装饰乙级资质延期时,企业需要注意以下几个重要事项: 提前了解政策和要求: 企业应提前了解并熟悉资质延期的相关政策和要求,包括所需材料、办理流程、时间限制等。这有助于企业做好充分准备,避免在申请过程中出现…

【机器学习聚类算法实战-5】机器学习聚类算法之DBSCAN聚类、K均值聚类算法、分层聚类和不同度量的聚集聚类实例分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

MYSQL课堂练习

学生表:studentsno,sname,ssex,sage,sdept)学号,姓名,性别,年龄,所在系 sno为主键课程表:Course(cno,cname,) 课程号,课程名 cno为主键 学生选课…

申报照明工程设计乙级资质关于财务审计报告的要求

申报照明工程设计乙级资质时,关于财务审计报告的要求通常包括以下几点: 审计报告类型:需要提供由具有法定资质的会计师事务所出具的财务审计报告。如果是企业已经运营满一个会计年度,应提交最近一个完整会计年度的年度审计报告。如…

Rust:struct 与字节序列的相互转换

在 Rust 中&#xff0c;将结构体&#xff08;struct&#xff09;与字节序列&#xff08;Vec<u8>&#xff09;相互转换的常见方法是使用序列化和反序列化库。Rust 有一个流行的序列化库叫做 serde&#xff0c;它支持多种数据格式。为了将结构体转换为字节序列&#xff0c;…

保障餐饮场所安全:定期送检可燃气体报警器

在餐饮行业&#xff0c;火灾隐患一直备受关注。餐厅、茶饮店等场所常常使用燃气设备&#xff0c;而这些设备带来了潜在的安全隐患。 为了及时发现并预防可燃气体泄漏&#xff0c;可燃气体报警器的定期送检显得尤为重要。那么&#xff0c;为什么可燃气体报警器需要定期送检呢&a…

【MySQL精通之路】系统变量-动态系统变量

许多服务器系统变量是动态的&#xff0c;可以在运行时进行设置。 参见“变量赋值的SET语法”。 有关设置系统变量的权限要求的描述&#xff0c;请参阅“系统变量权限” 【MySQL精通之路】系统变量-系统变量权限-CSDN博客 下表列出了所有适用于mysqld的动态系统变量。 该表列出…

java 设计模式(三)-- 单例模式

引言 单例模式是一种常用的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。单例模式在Java中实现起来相对简单&#xff0c;但实现方式有多种&#xff0c;每种方式都有其特点和适用场景。 一、单例模式的实现方式 1. 懒汉…

【Linux】从零开始认识进程间通信 —— 管道

送给大家一句话&#xff1a; 人要成长&#xff0c;必有原因&#xff0c;背后的努力与积累一定数倍于普通人。所以&#xff0c;关键还在于自己。 – 杨绛 从零开始认识进程间通信 1 为什么要进程间通信2 进程如何通信3 进程通信的常见方式4 管道4.1 什么是管道4.2 管道通信的系…

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义&#xff0c;是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG&#xff1a;The X/Open Porta…

零一万物Yi-1.5开源,34B/9B/6B多尺寸,34B超Qwen1.5-72B

前言 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;在各个领域展现出惊人的能力&#xff0c;为人们的生活和工作带来了巨大的改变。然而&#xff0c;大多数开源 LLM 的性能仍然无法与闭源模型相媲美&#xff0c;这限制了 LLM 在科研和商业领域的进一步应用。为了…

element-plus表格的表单校验如何实现,重点在model和prop

文章目录 vue&#xff1a;3.x element-plus&#xff1a;2.7.3 重点&#xff1a; 1) tableData放到form对象里 2) form-item的prop要写成tableData.序号.属性 <!--table-表单校验--> <template><el-form ref"forms" :model"form"><e…

leetcode 207.课程表

思路&#xff1a;拓补排序 数据结构中的知识&#xff0c;这道题其实本质上就是判断在课程表的这个有向图当中是否有环存在&#xff0c;如果有环&#xff0c;说明不能学完&#xff1b;没有环说明可以。判断有无环的做法是拓补排序最好解决。 下面就是拓补排序的做法了&#xf…