浅析javaScript中的浅拷贝和深拷贝

浅析JavaScript中的浅拷贝和深拷贝

拷贝是什么

在JavaScript中,我们通常把拷贝称之为复制或者克隆,这里的拷贝是指将一个变量的值复制到另一个变量或对象中的过程。但是在拷贝的过程中,存在一种不同的拷贝方式,即浅拷贝和深拷贝。

浅拷贝

浅拷贝(Shallow Copy)是指将一个对象复制到另一个对象中,只是将对象的引用复制了过去,而不是对对象进行拷贝。这种复制方式只是拷贝了对象的基本属性,而不是复制整个对象,因此两个对象仍然共享相同的内存地址。当其中一个对象的值发生改变时,另一个对象的值也会发生改变。

示例:

let obj1 = {
  name: 'Tom',
  age: 18,
  hobbies: ['music', 'reading']
};

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

obj2.age = 20;
obj2.hobbies.push('travelling');

console.log(obj1);
console.log(obj2);

在上述示例中,我们使用了Object.assign()方法进行浅拷贝。将obj1的值复制到obj2中,然后修改obj2的值,发现obj1的值未变,但是obj1和obj2的hobbies属性引用的数组是同一个,因此在修改obj2的hobbies属性时,obj1的hobbies属性也会跟着改变。

深拷贝

深拷贝(Deep Copy)是指将一个对象完全复制到另一个对象中,包括对象的引用和值,如果两个对象互相独立,那么其中一个对象的值发生改变时,另一个对象的值不会发生任何改变。

示例:

let obj1 = {
  name: 'Tom',
  age: 18,
  hobbies: ['music', 'reading']
};

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

obj2.age = 20;
obj2.hobbies.push('travelling');

console.log(obj1);
console.log(obj2);

在上述示例中,我们使用了JSON.parse(JSON.stringify())方法进行深拷贝。首先将obj1转换为JSON格式的字符串,再将JSON格式字符串转换为新的对象obj2。由于使用JSON.parse()方法时,会创建一个新的对象,因此obj1和obj2是不同的对象,obj2的修改不会影响obj1的值。

但是需要注意的是,深拷贝也有一些限制。例如,如果对象中存在循环引用或函数等特殊数据类型,深拷贝就无法进行。在这种情况下,我们需要使用其他的实现方法来进行拷贝。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析javaScript中的浅拷贝和深拷贝 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • javascript时间差插件分享

    下面我就为大家详细讲解一下“JavaScript时间差插件分享”的完整攻略。 一、什么是时间差插件? 时间差插件是一款 JavaScript 插件,它可以计算两个时间之间的时间差并将其格式化输出。时间差插件能够处理的时间格式包括:时间戳、ISO9601 格式或者自定义格式的时间字符串。 二、如何使用时间差插件? 1. 下载时间差插件并引入到网页中 首先,我们…

    JavaScript 2023年5月27日
    00
  • Vue之mixin全局的用法详解

    Vue之mixin全局的用法详解 1. 概述 Vue中的mixin(混入)机制可以让组件之间的代码可以进行复用,即在多组件中共用同一段代码,而不用把这段代码写在多个组件里。这对于代码复用、减少冗余代码是一个非常好的解决方案。mixin可以理解为是一种能够让我们将组件的一部分功能提取出来,并进行重复利用的机制。 2. 语法 下面是mixin的语法: var m…

    JavaScript 2023年6月11日
    00
  • JS原型prototype和__proto__用法实例分析

    来讲一下JS原型prototype和__proto__用法的攻略。 1. 前置知识 在开始之前,需要了解一些前置知识: JavaScript中所有对象的原型都是 Object.prototype,它包含了常用的方法如 toString()、valueOf() 等。 每个 JavaScript 对象都有一个 __proto__ 属性,指向它的原型对象。这个属性…

    JavaScript 2023年6月10日
    00
  • Java实现爬虫给App提供数据(Jsoup 网络爬虫)

    Java实现爬虫给App提供数据(Jsoup网络爬虫) 概述 爬虫是一种自动化的软件程序,可以模拟人类用户的行为,在互联网上自动收集获取数据并进行分析。在实际应用中,爬虫可以被用于网站数据的抓取、搜索引擎优化、数据分析等领域。Java是一种流行的编程语言,在爬虫方面也有很好的支持和工具。其中,Jsoup是一种高效的Java网络爬虫框架,可以用于爬取和解析HT…

    JavaScript 2023年6月11日
    00
  • JS JSON对象转为字符串的简单实现方法

    一、背景概述 JSON对象是JavaScript中处理数据的重要方式之一。当需要将JSON对象转换为字符串时,我们通常要使用JSON.stringify()方法来实现。本文将详细说明如何将JSON对象转换为字符串,以便网站作者们更好地理解和应用。 二、JSON.stringify()方法介绍 JSON.stringify()是JavaScript的一个标准方…

    JavaScript 2023年5月27日
    00
  • JavaScript中的方法重载实例

    下面是关于JavaScript中的方法重载实例的完整攻略。 什么是方法重载 方法重载指的是在同一个作用域下,为一个函数定义多个参数列表的函数,这些函数被称为重载函数。当函数被调用时,会根据传入的参数类型和数量的不同,自动选择执行对应的重载函数。在JavaScript中,由于没有类型声明,方法重载需要借助函数内部的判断逻辑来实现。 实现方法重载 实现方法重载的…

    JavaScript 2023年6月11日
    00
  • JS实现在状态栏显示打字效果完整实例

    下面是关于“JS实现在状态栏显示打字效果完整实例”的攻略: 1. 实现思路 在状态栏上显示打字效果,我们需要借助 JS 来动态地修改状态栏文字,并模拟打字效果。 具体实现思路如下: 设置一个状态栏元素,例如 <span> 标签。 通过 JS 动态修改状态栏文本,实现打字效果。 将打字效果分段,通过定时器控制每段文字的出现时间,实现逐个显示效果。 …

    JavaScript 2023年6月11日
    00
  • js事件监听器用法实例详解

    下面是“js事件监听器用法实例详解”的攻略: 什么是事件监听器? 事件监听器(Event Listener)是一种常用的 JavaScript 技术,它用来监听特定元素(如 DOM 元素)上的特定事件(如单击、滚动、鼠标移动、键盘按键等),并在事件发生时触发执行指定的回调函数。这种技术可以实现 Web 页面上的交互效果,比如:按钮单击后弹出框、下拉菜单、图片…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部