浅析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文件的代码

    异步加载JS文件的代码可以通过以下步骤实现: 创建一个script标签,并设置async属性为true。这将告诉浏览器立即下载JS文件,但不会阻塞页面的渲染。 示例代码: <script async src="path/to/your/js/file.js"></script> 创建一个JavaScript函数,该…

    JavaScript 2023年5月27日
    00
  • javaScript语法总结

    JavaScript语法总结 1. 变量与数据类型 JavaScript的数据类型分为基本数据类型和引用数据类型。基本数据类型包括数字、字符串、布尔值、null和undefined,引用数据类型包括对象、数组和函数。 1.1 变量的声明 在JavaScript中,通过 var、let、const 关键字声明一个变量。 var 声明的变量为函数作用域,let …

    JavaScript 2023年5月17日
    00
  • ajax实现简单实时验证功能

    下面是“ajax实现简单实时验证功能”的攻略: 什么是Ajax实时验证 Ajax是一种用于创建快速动态Web网页的技术,通过在不刷新页面的情况下向服务器发送请求并获取响应数据,可以实现实时验证表单数据的功能。 通常在前端验证数据的时候,我们会通过JavaScript来实现,但是客户端验证容易被用户绕过,所以我们还需要在后端进行验证。而利用Ajax可以在前端先…

    JavaScript 2023年6月10日
    00
  • 用js删除tbody的代码

    下面是用 JavaScript 删除 tbody 的完整攻略: 步骤一:获取 tbody 元素 在删除 tbody 之前,需要先获取 tbody 元素。可以通过以下三种方式获取 tbody 元素: 1. getElementById 方法 使用 getElementById 方法获取指定 Id 的元素。 const tbody = document.getE…

    JavaScript 2023年6月11日
    00
  • JavaScript中iframe实现局部刷新的几种方法汇总

    JavaScript中iframe实现局部刷新的几种方法汇总 简介 iFrame 是HTML中的一种标记,可以使网页中嵌套其他网页。iFrame 的应用非常广泛,可以用于实现局部刷新,即只刷新部分页面的内容,而不用刷新整个页面。这对于提高网站加载速度和用户体验非常有帮助。本文将介绍几种方法来实现iFrame的局部刷新。 方法一:修改iFrame src属性 …

    JavaScript 2023年6月10日
    00
  • 用jscript实现新建和保存一个word文档

    使用JScript在Windows操作系统上创建和保存Word文档需要用到Microsoft Word应用程序和其对象库的API。下面是操作的具体步骤: 步骤一:在计算机上安装Microsoft Word软件,确保Word的COM对象库已经注册。 步骤二:在JScript中创建Word应用程序对象,即创建Word对象,并检查是否创建成功: var wordA…

    JavaScript 2023年5月28日
    00
  • javascript如何定义对象数组

    JavaScript 是一种面向对象的编程语言,支持使用对象进行编程。对象数组则是在 JavaScript 中一种常用的数据结构,通常使用对象数组存储一组相关的数据。定义对象数组可以通过以下步骤进行: 步骤一:定义对象的属性 首先,需要定义对象的属性。对象属性是一个键值对,其中“键”表示属性的名称,“值”则是属性的值。可以使用常规的 JavaScript 对…

    JavaScript 2023年5月27日
    00
  • JAVA Iterator 转成 List 的操作

    当需要将Iterator转成List时,可以使用Java中的Collections工具类中提供的addAll()方法将Iterator中的元素逐个添加到List中。下面提供具体的操作步骤和示例说明: 1. 创建Iterator对象 首先创建一个Iterator对象,例如: Iterator<String> it = list.iterator()…

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