JS的深浅复制详细

下面是JS的深浅复制详细攻略。

什么是JS的深浅复制

在JS中,复制一个对象分为浅复制和深复制两种。所谓浅复制就是对象的最外层属性复制到新的对象中,而内层对象以及数组等引用类型则只是将引用地址复制了一份。而深复制则是将对象及其所有嵌套对象、数组等整个复制一份。

浅复制示例

在JS中,可以使用Object.assign()函数来实现浅复制。

let obj1 = {
  name: 'John',
  age: 26,
  hobbies: ['reading', 'writing']
};

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

console.log(obj2); // {name: "John", age: 26, hobbies: Array(2)}

// 修改obj2的hobbies属性值
obj2.hobbies.push('coding');

console.log(obj2); // {name: "John", age: 26, hobbies: Array(3)}
console.log(obj1); // {name: "John", age: 26, hobbies: Array(3)}

上面的示例中,我们首先声明了一个包含name、age以及hobbies属性的对象obj1,并将其复制到obj2中。然后我们修改了obj2中的hobbies属性,发现obj1的hobbies属性也随之改变了。这是因为obj1和obj2中的hobbies属性都是引用同一个数组对象。

深复制示例

对于JS中的深复制,我们可以使用递归的方式来完成。具体实现方式有很多种,我们这里使用JSON的stringify()parse()函数来实现。

let obj1 = {
  name: 'John',
  age: 26,
  hobbies: ['reading', 'writing'],
  address: {
    city: 'New York',
    postcode: '10001'
  }
};

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

console.log(obj2); 
// {
//   name: 'John',
//   age: 26,
//   hobbies: ['reading', 'writing'],
//   address: {
//     city: 'New York',
//     postcode: '10001'
//   }
// }

// 修改obj2的address属性值
obj2.address.city = 'Los Angeles';

console.log(obj2); 
// {
//   name: 'John',
//   age: 26,
//   hobbies: ['reading', 'writing'],
//   address: {
//     city: 'Los Angeles',
//     postcode: '10001'
//   }
// }

console.log(obj1); 
// {
//   name: 'John',
//   age: 26,
//   hobbies: ['reading', 'writing'],
//   address: {
//     city: 'New York',
//     postcode: '10001'
//   }
// }

对比深复制示例和浅复制示例,我们可以发现深复制更适用于对于复杂嵌套对象的处理。但需要注意的是,使用JSON的stringify()parse()函数进行深复制时,会忽略对象中的函数、正则表达式等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS的深浅复制详细 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言 strncpy()函数

    下面是关于 C 语言中 strncpy() 函数的详细使用攻略: 一、函数简介 strncpy() 函数是 C 语言中的字符串复制函数,它可以复制指定长度的字符串,并返回目标字符串地址。 函数原型如下: char* strncpy(char* dest, const char* src, size_t n); 参数说明:- dest:目标字符串,拷贝后的字符…

    C 2023年5月9日
    00
  • 详解Go语言的错误处理和资源管理

    详解Go语言的错误处理和资源管理 错误处理 在Go语言中,错误是一种实现了error接口的类型。一般来说,函数将返回值和一个error类型的值。如果函数执行成功,则返回值为期望的值,同时error值为nil。如果函数执行失败,则返回值为某个默认值,同时error值为个性化的错误信息。 Go语言提供了许多方法,方便对错误进行检查和处理。其中,最基础的方法是使用…

    C 2023年5月22日
    00
  • mysql全面解析json/数组

    关于“mysql全面解析json/数组”的完整攻略,主要有以下几个方面需要讲解: 1. 创建关联数组 MySQL提供了将JSON数据转换为数据库中的表格格式的能力。我们可以使用CREATE TABLE语句来创建一个包含JSON属性的表格。下面是一个例子: CREATE TABLE inventory (id INT PRIMARY KEY, name VAR…

    C 2023年5月23日
    00
  • Flash Actionscript 优化指南

    Flash Actionscript 优化指南 为什么需要优化 在开发复杂的Flash应用程序时,如不进行优化,可能出现以下问题: 程序速度变慢,用户体验变差。 耗费更多的CPU周期和内存,使程序更容易崩溃。 代码杂乱无章,难以维护和扩展。 因此,优化是每个Flash开发人员必须掌握的技能。 优化方法 以下是几种常见的优化方法: 1. 尽量避免使用深度嵌套显…

    C 2023年5月22日
    00
  • C语言求圆周率的简单实现方法

    下面是一份详细讲解“C语言求圆周率的简单实现方法”的完整攻略。 1. 引言 圆周率,又称π,是数学中一个重要的常数。它是圆的周长与直径之比。在实际应用中,圆周率的精度要求常常很高,因此求圆周率的方法也很多。本文将介绍一种简单的求解圆周率的实现方法。 2. 原理 这种方法的原理是,根据圆的面积公式 S = πr² ,我们可以通过随机落点的方法,将一个正方形内部…

    C 2023年5月22日
    00
  • C语言中extern详细用法解析

    请看下面的完整攻略。 C语言中extern详细用法解析 什么是extern? extern是C语言中的一个关键字,它的作用是用来声明一个变量或者函数的定义是在别的文件中,需要在本文件中进行引用。 extern的语法格式 在C语言中,extern语法格式如下所示: extern data_type variable_name; extern return_ty…

    C 2023年5月23日
    00
  • LG G4c怎么样 LG G4c参数配置介绍

    LG G4c怎么样 LG G4c参数配置介绍 LG G4c是一款由LG电子公司生产的安卓智能手机,以下将对其进行详细介绍。 硬件参数 LG G4c采用了5英寸IPS LCD显示屏,分辨率为720 x 1280像素,并搭载了四核心1.2 GHz Cortex-A53处理器。这款手机拥有1GB RAM和8GB ROM,设备支持MicroSD卡扩展。此外,LG G…

    C 2023年5月23日
    00
  • JSON对象转化为字符串详解

    JSON对象转化为字符串详解 在JavaScript编程中,我们经常需要处理JSON对象,并且将JSON对象转化成字符串类型以进行网络传输、文件存储等操作。本文将详细讲解如何将JSON对象转化为字符串类型。 为什么需要将JSON对象转化为字符串类型? 在JavaScript中,JSON对象是一种轻量级的数据交换格式。该格式由对象、属性和值组成,可以被所有支持…

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