JS中深度复制和浅复制有何不同

js中深拷贝和浅拷贝的区别是什么

JS中深拷贝浅拷贝的区别是什么,需要具体代码示例

在JavaScript中,对象的拷贝分为浅拷贝和深拷贝两种方式。浅拷贝仅仅复制对象的引用地址,而深拷贝则是创建一个完全独立的副本。

浅拷贝是将原对象的引用地址复制给新对象,它们指向同一块内存空间。当修改其中任意一个对象的属性时,另一个对象的相应属性也会被修改。这是因为它们共享相同的内存地址。

深拷贝是创建一个全新的对象,并将原对象中的所有属性逐一复制到新对象中,新对象和原对象互不影响。即使修改其中一个对象的属性,另一个对象的属性也不会受到影响。

下面,我将通过具体的代码示例来说明浅拷贝和深拷贝的区别。

首先,我们来看一个浅拷贝的示例:

let obj1 = {name: "Alice", age: 20};let obj2 = obj1;obj1.age = 21; console.log(obj1); // {name: "Alice", age: 21}console.log(obj2); // {name: "Alice", age: 21}

登录后复制

在上述代码中,我们通过将obj1赋值给obj2实现了一个浅拷贝。当修改obj1的age属性时,obj2的age属性也被修改了,这是因为它们指向同一块内存地址。

接下来,我们来看一个深拷贝的示例:

function deepClone(obj) {    if (obj === null || typeof obj !== 'object') {        return obj;    }        let clone = Array.isArray(obj) ? [] : {};        for (let key in obj) {        if (obj.hasOwnProperty(key)) {            clone[key] = deepClone(obj[key]);        }    }        return clone;}let obj1 = {name: "Alice", age: 20};let obj2 = deepClone(obj1);obj1.age = 21;console.log(obj1); // {name: "Alice", age: 21}console.log(obj2); // {name: "Alice", age: 20}

登录后复制

在上述代码中,我们定义了一个deepClone函数,用于实现深拷贝。该函数首先判断传入的参数是否为null或不是对象类型,如果是则直接返回,否则创建一个与传入对象类型相同的空对象clone。然后通过遍历原对象的属性,递归调用deepClone函数对每个属性进行深拷贝,并赋值给相应的clone属性。最后返回新对象clone。

通过使用deepClone函数,我们实现了对obj1的深拷贝。即使修改了obj1的age属性,但obj2的age属性依然保持不变,这是因为它们是两个完全独立的对象。

综上所述,浅拷贝仅仅复制对象的引用地址,而深拷贝是创建一个完全独立的副本。深拷贝能够保证在修改副本对象时不影响原对象,适用于有嵌套结构的对象拷贝。需要注意的是,在实际开发中,深拷贝可能会导致性能开销较大,因此需要根据实际情况选择合适的拷贝方式。

以上就是JS中深度复制和浅复制有何不同的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2682027.html

(0)
上一篇 2025年3月7日 15:34:10
下一篇 2025年2月28日 15:36:20

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 深入解析JavaScript中的原型链

    对JS中原型prototype的详解 JavaScript是一种基于原型的编程语言,它的核心概念之一就是原型(prototype)。原型是JavaScript中的一个重要概念,它是实现对象继承的基础。 在JavaScript中,每个对象都有…

    2025年3月7日
    200
  • 事件冒泡和事件委托的概念及作用

    JS事件冒泡与事件委托是什么,需要具体代码示例 事件冒泡(Event Bubbling)和事件委托(Event Delegation)是JS中两种与事件处理相关的重要概念。本文将详细介绍这两种概念,并提供具体的代码示例来解释它们的用法和实现…

    2025年3月7日
    200
  • js中document对象介绍

    JavaScript中Document对象介绍及代码示例 引言:在JavaScript中,Document对象是代表整个HTML文档的接口,它提供了对HTML文档的访问和操作方法。本文将介绍Document对象的常用方法和属性,并提供一些具…

    2025年3月7日
    200
  • JS中__proto__与prototype的区别

    JS中__proto__和prototype是两个与原型相关的属性,它们在功能上稍有不同。本文将具体介绍并比较这两者的区别,并提供相应的代码示例。 首先,我们先来了解一下它们的含义和用途。 proto __proto__是对象的一个内置属性…

    2025年3月7日
    200
  • js事件冒泡怎么获取冒泡元素的

    js事件冒泡怎么获取冒泡元素的,需要具体代码示例 事件冒泡是指当一个元素上的事件被触发时,其上层的父元素也会接收到这个事件。在JavaScript中,可以通过事件对象来获取冒泡元素。下面,我将为您提供具体的代码示例来解释如何获取冒泡元素。 …

    2025年3月7日
    200
  • js中new操作符做了什么

    JS中new操作符做了什么,需要具体代码示例 在JavaScript中,new操作符用于创建对象实例。它主要的功能是通过调用构造函数来创建一个新对象,并且将新对象的原型指向构造函数的原型属性上。这个过程涉及到以下的步骤: 创建一个新对象 当…

    2025年3月7日
    200
  • JS基本的数据类型有哪些

    JS基本的数据类型有以下几种:数字(Number)、字符串(String)、布尔值(Boolean)、空(Null)、未定义(Undefined)。 数字(Number):用于表示数字,包括整数和浮点数。例如: let num1 = 10;…

    2025年3月7日
    200
  • js怎么实现弹幕功能

    实现方法:1、创建html文件;2、添加html代码架构;3、在body标签中使用div、input、button标签分给页面设计效果显示框、输入框、弹幕提交按钮;4、添加script标签并写入js代码来实现弹幕效果;5、通过浏览器方式查看…

    2025年3月7日
    200
  • js中each函数怎么用

    在javascript中,并没有一个内建的each函数,但jquery库提供了一个非常有用的$.each() 函数,用于遍历数组或对象。如果你正在使用jquery,或者你的环境中包含了jquery,你可以这样使用$.each() 函数。 遍…

    编程技术 2025年3月7日
    200
  • 有关JS抽象工厂模式(详细教程)

    本篇文章主要给大家总结了一下作者在学习js抽象工厂模式时的经验和总结,有兴趣的朋友跟着学习下吧。 以下就是作者学习中遇到的问题以及代码实例,最后还给大家关于JS抽象工厂模式的学习做了总结。 抽象工厂模式(Abstract Factory)就…

    编程技术 2025年3月7日
    200

发表回复

登录后才能评论