首页 > 编程语言 >JavaScript 浅拷贝和深拷贝

JavaScript 浅拷贝和深拷贝

时间:2023-01-10 14:45:30浏览次数:39  
标签:需要 对象 JavaScript 修改 使用 拷贝

JavaScript 中的拷贝分为两种:浅拷贝和深拷贝。

浅拷贝是指在拷贝过程中,只拷贝一个对象中的指针,而不拷贝实际的数据。所以,浅拷贝中修改新对象中的数据时,原对象中的数据也会被改变。

JavaScript 中浅拷贝可以通过如下几种方式实现:

  • 使用结构赋值的方式,例如 let newObject = {...oldObject}
  • 使用 Object.assign() 方法,例如 let newObject = Object.assign({}, oldObject)

深拷贝是指在拷贝过程中,拷贝一个对象中的所有数据,并创建一个新对象,对新对象进行操作并不会影响到原对象。

JavaScript 中深拷贝可以通过如下几种方式实现:

  • 使用 JSON.parse(JSON.stringify(object))
  • 使用递归的方式,手动拷贝对象的每一层
  • 使用lodash类库的_.cloneDeep方法

另外在特定的场景中,如果对象中存在函数或循环引用,上述方法可能会出现问题。为了解决这些问题,可以使用第三方库如lodash等来实现深拷贝。

此外, 如果你需要深拷贝自定义的对象,需要实现一个深度遍历的函数来遍历对象中的每一层,并进行拷贝。还有,如果对象中有对其他对象的引用或者包含 Symbol 属性的对象,那么上述深拷贝的方式也可能会失效,需要使用更加高级的方式来实现深拷贝。

总的来说,在使用浅拷贝和深拷贝时,需要根据需求和对象的结构来进行选择。通常来说,如果需要对对象进行修改并且不希望对原对象造成影响,那么应该使用深拷贝。如果只是需要读取对象中的数据而不需要修改,那么可以使用浅拷贝。

需要注意的是,JavaScript中的拷贝是拷贝的引用,而不是值。当你修改拷贝出来的对象的属性的值的时候,原对象的属性也会被修改,所以在进行深拷贝时,需要注意循环引用的问题, 防止栈溢出.

标签:需要,对象,JavaScript,修改,使用,拷贝
From: https://www.cnblogs.com/yuzhihui/p/17040234.html

相关文章

  • javascript中无限分类递归树
    摘抄:https://www.cnblogs.com/silfox/p/11411680.html(原文)列表转换成树形结构方法定义:1//javascript树形结构2functiontoTree(data){3//删除所有chi......
  • 14个非常棒的 JavaScript 游戏开发框架推荐
     ​​LimeJS​​​​​​这是一个基于HTML5游戏框架,用于快速构建运行于现代触摸屏和桌面浏览器的游戏(需要***访问)。 ​​Impact​​​​​​ 这是一个专业的JavaScript......
  • 浏览器访问 JSP 文件时无法进入 JavaScript 代码
    问题描述浏览器访问<head>中有JavaScript代码的JSP文件:<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>$Title......
  • JavaScript学习笔记—常量、标志符
    1.常量使用const声明常量,常量只能赋值一次,重复赋值会报错除了常规的常量外(如PI),有一些对象类型的数据也会生命为常量constPI=3.1415926;console.log(PI);//3.14......
  • Java的深拷贝和浅拷贝的区别
    一、拷贝的引入(1)、引用拷贝创建一个指向对象的引用变量的拷贝。Teacherteacher=newTeacher("Taylor",26);Teacherotherteacher=teacher;System.out.println(te......
  • 从主机往虚拟机拷贝文件提示“虚拟机无法扫描本地目录,您可能没有执行本操作的权限
    下面的内容我在新浪博客发表过,地址是从主机往虚拟机拷贝文件提示“虚拟机无法扫描本地目录,您可能没有执行本操作的权限”_来自金沙江的小鱼_新浪博客(sina.com.cn)在这......
  • Python浅拷贝和深拷贝
    预备知识对象的三个属性python中每一个对象都有三个属性:唯一标志,类型和值。其中对象的标志是一串数字,是每个对象的唯一标识,位于同一地址的对象标志相同。对象的值相等和......
  • 一次代码重构 JavaScript 图连通性判定
    简介说重构其实就是整理了代码,第一次自己手写写的很丑,然后看了书上写的,虽然和书上的思路不同但是整理后几乎一样漂亮效果整体代码如下classNode{AdjNodes=new......
  • JavaScript 性能优化
    JavaScript是一门动态类型、解释型的编程语言,在网页开发中扮演着非常重要的角色。随着网页的复杂度和访问量的增加,JavaScript性能的优化就显得越来越重要。下面是一些常......
  • JavaScript 防抖和节流
    JavaScript防抖和节流是两种常见的性能优化技术,用于减少函数的执行次数。防抖(debounce)是指在一段时间内,如果有多次触发事件,则只执行最后一次事件。节流(throttle)是指在一......