JavaScript对象拷贝与Object.assign用法实例分析

JavaScript对象拷贝与Object.assign用法实例分析

在JavaScript编程中,对象拷贝是一项非常重要的任务,因为我们经常需要在代码中使用对象,但由于JavaScript对象的引用特性,往往原始对象会被误修改或者无意间影响其他部分代码,这时候需要做对象拷贝,保持数据的安全完整性。JavaScript的标准库提供了多种深复制或浅复制对象的拷贝方法,其中最常用的就是Object.assign(用于复制一个或多个对象的公共属性)。

本文主要介绍 JavaScript 对象拷贝的概念及步骤、Object.assign的用法及实例分析。

JavaScript对象拷贝的概念及步骤

在进行对象拷贝之前,需要明确JavaScript数据类型的特性。JS中,复杂数据类型是由对象、数组、函数多种类型组合而成的,基本数据类型包括:字符串、数字、布尔值、Undefined、Null。其中,基本数据类型直接存储在栈内存中,不涉及引用的传递,而复杂数据类型则存储在堆内存中。在JS中,往往通过对象的引用来访问和操作对象,如果直接操作一个引用类型的对象,往往会把它修改成一个不期望的结果。为了解决这个问题,我们需要进行复制对象并拷贝到新的地址中,而不是直接引用。JavaScript 对象拷贝就是将一个对象从位置 A 复制到位置 B,同时两个位置存储的数据具有相同的值和属性。

对象拷贝的步骤如下:

  1. 创建一个新的对象,即目标对象(destination object)。
  2. 遍历源对象(source object)的属性,然后复制属性值到目标对象中。
  3. 如果源对象的属性是一个对象,则递归地调用对象拷贝方法。

Object.assign方法

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它返回作为目标对象的对象。

简单示例:

let obj1 = { a: 1 };
let obj2 = { b: 2 };
let obj3 = { c: 3 };

let obj4 = Object.assign({}, obj1, obj2, obj3); // 将 obj1, obj2, obj3 的属性拷贝到 obj4 中

console.log(obj4); // { a: 1, b: 2, c: 3 }

Object.assign() 方法会遍历所有对象并把它们中的所有可枚举属性拷贝给目标对象,并返回目标对象。注意,Object.assign() 会将每个源对象的可枚举和可继承属性(包括 Symbol 类型的属性值)拷贝到目标对象中。源对象的 引用类型 属性会在 目标对象 中存储一个指向该属性存储位置的引用,而不是递归复制引用值中的属性。

Object.assign用法实例分析

实例一:拷贝单个对象

下面是一个拷贝单个对象的例子,基于原始数据,简单转换一个元素,不影响原始数据。

let obj1 = { a: 1 };
let obj2 = Object.assign({}, obj1);
obj2.a = 2;

console.log(obj1); // { a: 1 }
console.log(obj2); // { a: 2 } 

在这个例子中,我们拷贝了obj1到新的对象obj2,修改obj2的属性不会影响原始数据obj1。

实例二:拷贝多个对象

我们也可以拷贝多个对象,并把它们的属性都拷贝到目标对象中。

let obj1 = { a: 1 };
let obj2 = { b: 2 };
let obj3 = { c: 3 };

let obj4 = Object.assign({}, obj1, obj2, obj3); // 将 obj1, obj2, obj3 的属性拷贝到 obj4 中

console.log(obj4); // { a: 1, b: 2, c: 3 }

在这个例子中,我们将 obj1, obj2 和 obj3 的属性拷贝进了 obj4中。如果有相同的属性,后面的会覆盖前面的属性,因此最后 obj4中,a的值为1,b的值为2,c的值为3。

总结

本文介绍了JavaScript对象拷贝的概念及步骤和Object.assign的用法及实例分析。

对象拷贝是一项非常重要的任务,可以通过对象拷贝来防止原始对象被误修改或多次引用,保持数据的安全完整性。

Object.assign() 方法是浅复制的,即只会拷贝每个源对象的一级属性,不会进行递归复制引用类型中的属性。通过这种方法,可以轻松地将多个对象拷贝到一个新的目标对象中,并在这个过程中对目标对象中的属性进行更改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript对象拷贝与Object.assign用法实例分析 - Python技术站

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

相关文章

  • c++如何控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量

    控制C++对象的创建方式和数量,一般可以通过两种方式实现:禁止对象的栈和堆上的创建,以及限制对象数量。下面将分别对这两种方法进行介绍,并提供示例说明。 1. 禁止对象在栈和堆上创建 为了禁止对象在栈和堆上创建,一种方法是将C++对象的构造函数设置为私有,以确保对象只能在类内部创建。为了让外部访问该类的对象,可以使用静态方法作为工厂函数,该函数在内部创建类的对…

    C 2023年5月22日
    00
  • 天天飞车C级赛车奥赛德属性解析 天天飞车奥赛德怎么样

    天天飞车C级赛车奥赛德属性解析 奥赛德的基本属性 奥赛德是一台拥有强大抓地力和过弯性能的赛车,它的基本属性为: 速度:5 加速:4 操控:7 平稳:5 强度:5 其中,操控是奥赛德最出色的一项属性,它让赛手们能够更快地穿越弯道,提高比赛的成绩。 奥赛德的细节属性 奥赛德的细节属性包括: 重量:1350kg 长度:4663mm 宽度:1892mm 车高:142…

    C 2023年5月23日
    00
  • 利用上下文属性将 C++ 对象嵌入 QML 里

    利用上下文属性将 C++ 对象嵌入 QML 里需要遵循以下步骤: 构建 C++ 类,使其能够注册到 QML 中 创建 QML 文件,利用上下文属性将 C++ 对象嵌入到 QML 中 在 QML 中使用 C++ 对象 下面我们用两个示例说明这个过程。 示例一 假设我们需要向 QML 注册名为 Person 的 C++ 类,并将其实例化之后添加到 QML 上下文…

    C 2023年5月22日
    00
  • C 程序 检查整数是正还是负

    C程序检查整数是正还是负 程序概述 这个程序可以检查一个输入的整数是正还是负数。如果输入的整数大于0,则会输出”Positive”,否则输出”Negative”。 程序代码 #include <stdio.h> int main() { int num; printf("Enter a number: "); scanf(&q…

    C 2023年5月9日
    00
  • 详解利用C语言如何实现简单的内存池

    利用C语言实现简单的内存池一般可以分为以下步骤: 步骤一:自定义内存池数据结构 首先,我们需要自定义一个内存池的数据结构,一般包含以下几个要素: 内存池的大小(即可分配的内存总大小) 内存块的大小(即每个可分配的内存块的大小) 空闲内存块的数量(即尚未被分配的内存块的数量) 内存块的首地址(即内存池的起始地址) 我们可以使用结构体来表示这些要素,例如: st…

    C 2023年5月23日
    00
  • C++ 中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码

    导入 Excel 数据到数据库的过程可以分为两步:读取 Excel 数据和将数据写入数据库。下面将分别进行说明。 读取 Excel 数据 安装必要的依赖包 shpip install pandas openpyxl 创建一个 Python 脚本,并导入 pandas 库 pythonimport pandas as pd 读取 Excel 文件 “`pyt…

    C 2023年5月22日
    00
  • C语言中如何进行指针操作?

    C语言中指针操作非常重要,通过指针可以直接操作内存,能够帮助我们更好地利用计算机资源。下面我将详细讲解C语言中指针操作的方法。 一、定义指针(声明和初始化) 在C语言中,声明指针使用*,例如: int *p; 指针定义完成后,需要为其赋值,使其指向一个具有内存地址的变量,例如: int a = 1; int *p = &a; 说明:&符号表示…

    C 2023年4月27日
    00
  • C语言循环结构详解

    C语言循环结构详解 什么是循环结构? 循环结构是计算机编程语言中最重要的结构之一,它允许程序重复执行一次或多次某个代码块。 在C语言中,循环结构主要有以下三种: for循环结构 while循环结构 do…while循环结构 for循环结构 for循环结构是最常用的循环结构之一,在需要重复执行N次的情况下,使用for循环比较便捷。 for循环结构的语法格式…

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