当前位置:首页 > 经验 >

简述浅拷贝和深拷贝的区别(浅拷贝深拷贝哪个是原地操作)

来源:原点资讯(www.yd166.com)时间:2022-10-24 22:53:14作者:YD166手机阅读>>

  • 使用场景:开发的时候对引用类型进行处理,为了避免修改一个引用类型数据时,其他用这个变量来赋值的变量也都被改变了。如下例子:

我们修改李明的年龄的时候,小明的年龄也跟着发生改变了,这不是我们预期的结果。所以这时候就需要用深拷贝或浅拷贝来进一步处理了。

let person = {}, xiaoming = person, liming = person; (xiaoming.age = 12), (liming.age = 18); console.log(xiaoming.age, liming.age); // 18 18

简述浅拷贝和深拷贝的区别,浅拷贝深拷贝哪个是原地操作(1)


先了解一下引用类型:它是一种数据结构,在JavaScript也可以称为对象定义,它描述一类对象所具备的属性和方法。存放在堆内存里,保存的是一个指针,常见的引用类型: Array、Object。
  • 创建的方式:

//1 Object构造函数 let person = new Object(); console.log(person); // {} // 2 对象字面量 let person = {} // let arr = new Array(); let arrr = [];


浅拷贝:按位拷贝,复制了空间,不复制资源。对对象拷贝,遇到基本数据类型,拷贝值,遇到引用类型拷贝的是内存地址(还是会受到影响)。
  • 浅拷贝的方式(适用只有一级的对象):
  1. Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

2. 缺点:二级(引用类型)还是会受到影响,如下:

let obj_1 = { a: 1, c: { b: 2 } }; let obj_2 = Object.assign({}, obj_1); console.log(obj_2); //=> { a: 1, c: { b: 2 } } //尝试修改obj_1 obj_1.c.b = 10; obj_1.a = 6; // a不受影响,b受影响 console.log(obj_1); // => { a: 6, c: { b: 10 } } console.log(obj_2); //=> { a: 1, c: { b: 10 } }


深拷贝: 重新开辟了空间进行深度复制,互不影响。
  • 深拷贝的方式:
  1. JSON.parse(JSON.stringify())
  1. 递归

let obj_1 = { a: 1, c: { b: 2 } }; function deepClone(obj) { let obj_1 = {}; for (const key in obj) { if (Object.prototype.toString.call(obj[key]) === "[object Object]") { obj_1[key] = deepClone(obj[key]); } else { obj_1[key] = obj[key]; } } return obj_1; } let obj_2 = deepClone(obj_1); console.log(obj_2); //=> { a: 1, c: { b: 2 } } //尝试修改obj_1 obj_1.c.b = 10; obj_1.a = 6; obj_2.a = 2; obj_2.c.b = 12; // 互不影响 console.log(obj_1); //=> { a: 6, c: { b: 10 } } console.log(obj_2); //=> { a: 2, c: { b: 12 } }

我是爱美的姑娘,关注我,每天为您分享和复习前端开发的知识点、学习的同时还可以了解最新的娱乐八卦、幽默搞笑,学习更轻松哟!

简述浅拷贝和深拷贝的区别,浅拷贝深拷贝哪个是原地操作(2)

栏目热文

深拷贝和浅拷贝的简单理解(深拷贝解决浅拷贝的问题)

深拷贝和浅拷贝的简单理解(深拷贝解决浅拷贝的问题)

前言平时我们从数据库查询出 po 对象,要返回给前端时,会有另一个对象 vo,此时我们需要将 po 的值复制给 vo,如...

2022-10-24 22:07:09查看全文 >>

深拷贝解决浅拷贝的问题(深拷贝的缺点)

深拷贝解决浅拷贝的问题(深拷贝的缺点)

作者:小丑转发链接:https://mp.weixin.qq.com/s/i_vGi8C5PBa_KOV7MtVPWQ前...

2022-10-24 22:51:29查看全文 >>

浅拷贝和深拷贝的值会不会变(高拷贝和低拷贝的区别)

浅拷贝和深拷贝的值会不会变(高拷贝和低拷贝的区别)

前面我们曾经聊到列表从内存的角度是什么样的?有兴趣的可以关注我,看一下《python之从内存读写的角度,学习并玩转lis...

2022-10-24 22:44:50查看全文 >>

为什么要深拷贝浅拷贝(零拷贝和深拷贝)

为什么要深拷贝浅拷贝(零拷贝和深拷贝)

关于对象的拷贝,大部分时间我们用的都是浅拷贝,比如赋值符号(“=”)以及memcpy()等。那么既然浅拷贝这么简单,为...

2022-10-24 22:08:28查看全文 >>

深拷贝和浅拷贝和零拷贝的区别(深拷贝与浅拷贝示意图)

深拷贝和浅拷贝和零拷贝的区别(深拷贝与浅拷贝示意图)

原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建...

2022-10-24 22:15:15查看全文 >>

深拷贝和浅拷贝图解(深拷贝和浅拷贝的方法)

深拷贝和浅拷贝图解(深拷贝和浅拷贝的方法)

作者:南枝向暖北枝寒MA 原文链接:https://blog.csdn.net/mall_lucy/article/de...

2022-10-24 22:21:57查看全文 >>

谈谈你对浅拷贝和深拷贝的理解(零拷贝和深拷贝)

谈谈你对浅拷贝和深拷贝的理解(零拷贝和深拷贝)

先说下自己的理解吧,浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj...

2022-10-24 22:24:54查看全文 >>

深拷贝和浅拷贝有哪些应用

深拷贝和浅拷贝有哪些应用

大家好我是发哥,本期说说C 深拷贝和浅拷贝。对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存...

2022-10-24 22:41:01查看全文 >>

高拷贝和低拷贝的区别(深拷贝浅拷贝零拷贝的区别是什么)

高拷贝和低拷贝的区别(深拷贝浅拷贝零拷贝的区别是什么)

一、如何判断我的质粒是高拷贝还是低拷贝质粒?高拷贝质粒每 1 ml LB 培养物应产生 3-5 ug DNA,而低拷贝质...

2022-10-24 22:41:09查看全文 >>

直接复制和浅拷贝和深拷贝的区别(深拷贝与浅拷贝示意图)

直接复制和浅拷贝和深拷贝的区别(深拷贝与浅拷贝示意图)

概述今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~需求:将一个列表的数据复制到另一个列表中。思...

2022-10-24 22:39:34查看全文 >>

文档排行