浅析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日

相关文章

  • js动态引入的四种方法

    JavaScript动态引入外部脚本文件的四种方法如下: Method 1 – 使用 document.createElement() 动态创建 script 元素并添加到 DOM 中 这是最基本的方法,在 JavaScript 中使用 document.createElement(‘script’) 方法动态创建 script 元素,然后设置其 src 属…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript数组的常用方法

    详解JavaScript数组的常用方法 简介 在JavaScript中,数组是一种非常常见的数据类型。数组可以包含多种类型的数据,包括数字、字符串、对象等等。JavaScript提供了一系列的数组方法,可以方便地操作数组数据。在本篇文章中,我们将会介绍一些经常使用的JavaScript数组的方法。 push() push()方法可以向数组的末尾添加一个或多个…

    JavaScript 2023年5月27日
    00
  • Jquery方式获取iframe页面中的 Dom元素

    获取 IFRAME 页面中的 DOM 元素,可以通过两种方式实现:直接获取子页面中的元素对象或通过 iframe 的 contentWindow 属性获取子页面的 window 对象,从而操作其中的 DOM 元素。以下是使用 jQuery 的方式获取 IFRAME 页面中 DOM 元素的攻略。 使用 jQuery 的方式获取 IFRAME 页面中的 DOM …

    JavaScript 2023年6月10日
    00
  • js截取字符串的两种方法及区别详解

    当我们需要在JavaScript中处理字符串时,常常需要对字符串进行截取。本篇攻略将会详细讲解js截取字符串的两种方法及其区别。 一、JavaScript中substring()方法 let str = "hello world"; let strNew = str.substring(3); console.log(strNew); 上…

    JavaScript 2023年5月28日
    00
  • 如何屏蔽防止别的网站嵌入框架代码

    首先,屏蔽防止别的网站嵌入框架代码,需要通过设置 HTTP 头来实现。具体步骤如下: 在服务器端,设置 HTTP 响应头 X-Frame-Options。 X-Frame-Options 可以设置三个参数: DENY:禁止该页面被任何网站嵌入到 iframe 中。 SAMEORIGIN:只允许该页面在相同域名下的网站中被嵌入到 iframe 中。 ALLOW…

    JavaScript 2023年6月11日
    00
  • JavaScript学习笔记(三):JavaScript也有入口Main函数

    接下来我将详细讲解“JavaScript学习笔记(三):JavaScript也有入口Main函数”的完整攻略。 什么是JavaScript的入口Main函数? 在很多编程语言中,都有一个入口函数,比如Java中的main函数、C++中的main函数等等。在JavaScript中,虽然没有像Java、C++那样明确的入口函数,但是我们可以通过编写一个init函…

    JavaScript 2023年5月27日
    00
  • javascript先序遍历DOM树的方法

    关于JavaScript先序遍历DOM树的方法,以下是详细讲解的完整攻略: 什么是DOM树? 首先我们需要了解什么是DOM树,DOM(Document Object Model)树是浏览器用来解析HTML文档时,生成的一颗树状结构。它包含了HTML标签、文本、注释等所有节点,每个节点都是一个实际存在的JS对象。DOM树中的节点按照层级关系排列,我们可以通过J…

    JavaScript 2023年6月10日
    00
  • JavaScript事件学习小结(二)js事件处理程序

    以下是“JavaScript事件学习小结(二)js事件处理程序”攻略的详细讲解: 简介 JavaScript中事件处理程序是指在用户与网页交互时由浏览器调用的函数。事件处理程序通常用来响应用户的点击、鼠标移动、键盘输入等行为。 事件处理程序的三种方式 JavaScript中有三种方式定义事件处理程序: 直接在HTML标签中使用内联事件处理程序; 在JS脚本中…

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