我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript深拷贝方法structuredClone如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript深拷贝方法structuredClone如何使用

本篇内容主要讲解“JavaScript深拷贝方法structuredClone如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript深拷贝方法structuredClone如何使用”吧!

正文

对于深拷贝,最容易也应该是常见的方法是使用 JSON.parse() + JSON.stringify() ,还有一个借助第三方脚本库 lodash ,其中方法 cloneDeep 可以实现深拷贝。现在可以使用原生的 structuredClone() 方法。

浅拷贝与深拷贝

首先,先来了解一下浅拷贝和深拷贝的区别:

  • 浅拷贝:就是只拷贝对象的第一层。引用了更深层次的内容。可以使用扩展运算符 ... 或使用 Object.assign() 在 JavaScript 中实现浅拷贝。

  • 深拷贝:是指对象的所有层次都被复制。这是对象的真实副本。可以使用 JSON.parse() + JSON.stringify() 执行此操作,现在,还可以使用原生方法 structuredClone() 执行此操作。

使用 structuredClone 进行深拷贝

原生 structuredClone() 方法使用结构化克隆算法创建给定值的深层拷贝。

结构化克隆算法用于复制复杂 JavaScript 对象的算法。通过来自 Worker 的 postMessage() 或使用 IndexedDB 存储对象时在内部使用。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。

语法如下:

structuredClone(value)structuredClone(value, { transfer })
  • value:被克隆的对象。可以是任何结构化克隆支持的类型。

  • transfer:为可选参数,是一个可转移对象的数组,里面的 并没有被克隆,而是被转移到被拷贝对象上。

返回值:返回值是原始值的深拷贝。

下面是示例代码:

const objProfile = { name: "DevPoint", detail: { age: 30 } };const deepCopy = structuredClone(objProfile);const shallowCopy = { ...deepCopy };console.log(shallowCopy); // {"name": "DevPoint", "detail": {  "age": 35 } }deepCopy.name = "天行无忌";deepCopy.detail.age = 35;console.log(objProfile); // {"name": "DevPoint", "detail": {  "age": 30 } }console.log(deepCopy); // {"name": "天行无忌", "detail": {  "age": 35 } }

正如在此代码片段中所见:

  • 更新第一层克隆对象的属性后,原始属性不会更新。

  • 在更深层次更新属性后,原始属性既不更新。发生这种情况是因为在这种情况下,还复制了更深层次。

  • 而对于浅拷贝对象 shallowCopy 来说,其值会随着对象 deepCopy 的变化而变化,在项目开发中很容易带来BUG

structuredClone() 现在可在所有主流浏览器和运行时(如 Node.jsDeno)的最新版本中使用。

到此,相信大家对“JavaScript深拷贝方法structuredClone如何使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript深拷贝方法structuredClone如何使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript深拷贝方法structuredClone如何使用

本篇内容主要讲解“JavaScript深拷贝方法structuredClone如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript深拷贝方法structuredClone如
2023-07-05

JavaScript深拷贝方法structuredClone使用

这篇文章主要为大家介绍了JavaScript深拷贝方法structuredClone使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-22

JavaScript深拷贝和浅拷贝如何使用

本篇内容主要讲解“JavaScript深拷贝和浅拷贝如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript深拷贝和浅拷贝如何使用”吧!拷贝(又名克隆,复制等),但是又分深拷贝
2023-06-21

JavaScript浅拷贝与深拷贝如何实现

这篇文章主要介绍“JavaScript浅拷贝与深拷贝如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript浅拷贝与深拷贝如何实现”文章能帮助大家解决问题。在 JavaScript
2023-06-27

python浅拷贝与深拷贝使用方法详解

浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联
2022-11-13

如何理解JavaScript中的浅拷贝与深拷贝

本篇文章给大家分享的是有关如何理解JavaScript中的浅拷贝与深拷贝,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 浅拷贝在使用JavaScript对数组进行操作的时候,如
2023-06-16

Golang中的深拷贝与浅拷贝如何使用

本篇内容主要讲解“Golang中的深拷贝与浅拷贝如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang中的深拷贝与浅拷贝如何使用”吧!一、概念1、深拷贝(Deep Copy)拷贝的是
2023-07-05

JavaScript中的深拷贝如何实现

今天小编给大家分享一下JavaScript中的深拷贝如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。深拷贝的最终实现这
2023-07-04

怎么使用json方式实现深拷贝

使用json方式实现深拷贝的步骤如下:1. 将要拷贝的对象转换为json格式的字符串。2. 将json字符串转换回对象。以下是一个示例代码:```pythonimport jsondef deep_copy(obj):# 将对象转换为jso
2023-09-05

如何使用jQuery中的$.extend()方法实现浅拷贝

这篇文章主要介绍了如何使用jQuery中的$.extend()方法实现浅拷贝,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用jQuery中的$.extend()方法comm
2023-06-17

如何使用es6中的Object.assign()方法实现浅拷贝

这篇文章主要为大家展示了“如何使用es6中的Object.assign()方法实现浅拷贝”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用es6中的Object.assign()方法实现浅拷
2023-06-17

JavaScript中如何使用扩展运算符拷贝数组

这篇文章将为大家详细讲解有关JavaScript中如何使用扩展运算符拷贝数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。拷贝数组const arr = [1, 2, 3, 4]const newArr
2023-06-05

React替换传统拷贝方法的Immutable使用

Immutable.js出自Facebook,是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构,使用结构共享。所有的更新操作都会返回新的值,但是在内部结构是共享的,来减少内存占用
2023-02-06

js如何使用循环遍历对象方法实现浅拷贝

这篇文章将为大家详细讲解有关js如何使用循环遍历对象方法实现浅拷贝,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用循环遍历对象方法(遍历对象的属性赋值给新对象)function shallowCopy(
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录