首页 > 其他分享 >对象赋值给变量

对象赋值给变量

时间:2024-10-12 11:18:18浏览次数:8  
标签:obj1 const target 对象 Object 赋值 assign 变量

问题:变量a和对象b。直接使变量a = b,改变a的值会使对象b本身跟着改变。

原因:变量a得到的是对象b的地址,a和b指向内存堆中同一个对象。

解决:

        ①:解构对象b再赋值给变量a

                  a = {...b}

        ②:JSON序列化

                  et a = JSON.parse(JSON.stringify(b))

        ③:对象合并方法,复制对象的可枚举属性到目标对象。

                Object.assign(target, ...sources)

                target--->目标对象   source--->源对象

                Object.assign(a, b)

补充:Object.assign对象合并方法

eg:const target = { a: 1 };

const source1 = { b: 2 };

const source2 = { c: 3 };

Object.assign(target, source1, source2);

target // {a:1, b:2, c:3}

将源对象(source)的所有可枚举属性,复制到目标对象(target)。如果该参数不是对象,则会先转成对象。

Object.assign方法实行的是浅拷贝,而不是深拷贝。如果源对象某个属性的值是对象, 那么目标对象拷贝得到的是这个对象的引用。改变源对象会使复制的目标对象也改变, 而JSON序列化和解构不会。如果改变目标对象,三种方式都不会使源对象发生变化。

Eg:const obj1 = ref<any>({
    name:'yyy',
    age:'18'
})
const obj2 = ref<any>({
    hobby:'read books',
    sex:'girl',
})
Object.assign(data,obj1.value,obj2.value)  //合并obj1和obj2

//则 data:{ "name": :“yyy”,
"age": "18", 
"hobby": "read books",
 "sex": "girl" }

obj1.value.name = '改变obj1后的yyy'  //改变obj1


//则 data:{ "name": "改变obj1后的yyy", 
"age": "18", 
"hobby": "read books",
 "sex": "girl" }

标签:obj1,const,target,对象,Object,赋值,assign,变量
From: https://blog.csdn.net/qq_52335693/article/details/142873374

相关文章

  • JDK配置环境变量
    JDK下载官网:JavaDownloads|Oracle一、前期准备1.在官方网站中下载好你需要的版本,这里我下载的是JDK21,看自己的电脑系统是什么,我这里是Windows系统。二、安装三、配置变量在系统中找到高级系统设置,点击环境变量1.在系统变量中新建CLASSPATH变量名:CLASSPATH变......
  • 【Java】创建对象的几种方式
    【Java】创建对象的几种方式合集-Java基础(11)1.【Java】Integer包装类缓存(cache)05-092.【java】Java之关于基本数据类型和引用数据类型的存放位置05-093.【java】ArrayList和LinkedList的区别05-104.【java】【集合类】HashMap与HashTable的区别05-105.【Java】的四种引用......
  • Java中class对象的学习
    Class对象目录Class对象获取class对象的三种方法获取类的各种信息获取类名获取类修饰符获取包的信息获取父类的class对象获取接口信息构造函数Constructor两种创建对象的方式使用Class.forName()加载类并创建对象使用Class.forName()加载类,并调用特定的构造器获取class对象的三......
  • 理解Java中的面向对象
    文章目录前言1封装性1.1C语言中的封装1.2Java中的封装1.2.1基本概念1.2.2类的使用方法1.2.2.1构造方法1.2.2.2对象的创建与使用1.2.3访问权限2继承性3多态性3.1方法重写3.2方法重载总结前言面向对象与面向过程是当今编程世界的两种编程思想,面向过程......
  • 【图像识别】用于对象识别的良好彩色图像描述符/功能(Matlab实现)
    ......
  • vue3--vite环境变量的配置
    在开发环境、测试环境、生产环境需要请求不同的接口,对应不同的数据。因此,配置环境变量也尤为重要第一:为项目根目录开发、测试、生成(也可以加入预发布)环境创建.env文件.env.development.env.production.env.test第二:配置数据#变量必须以VITE_为前缀才能暴露给外部读取......
  • JavaScript的内置对象有哪些?
    一、内置对象1、概念​JavaScript中的对象共分为3种:自定义对象、浏览器对象和内置对象。之前我们自己创建的对象都属于自定义对象,而内置对象又称为API,是指JavaScript语言自己封装的一些对象,用来提供一些常用的基本功能,来帮助我们提高开发速度,例如:数学-Math、日期-Date......
  • ossfs挂载OSS对象存储时出现libcrypto版本问题
    问题:在容器内使用ossfs挂载OSS对象存储,安装和配置都按照官方教程很顺利,但是挂载的时候出现了问题,libcrpyto1.0.0动态库缺失。原来是下载错了安装包,官网有Ubuntu22.04的安装包,所以该问题不存在,下述内容仅提供类似问题的思路。!!!但是遇到了容器内挂载OSS的另一个问题,需要访问FUSE文......
  • JSP内置对象(常用)
    request获取客户端传递的参数request.getParameter("name");在request对象中存储一个变量和数值request.setAttribute("Stringname","Objobj");获取request对象中存储的值request.getAttribute("Stringname");response设置响应内容及编码方式response.serConten......
  • 类和对象(上)
    类和对象(上)前言一、C++中的struct二、类的定义三、类的访问限定符和封装四、类的实例化五、类对象模型六、this指针七、类的6个默认成员函数1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载前言C语言是面向过程的,关注的是过程,C++是面向对象的,关注的是对象。对......