当前位置: 首页 > news >正文

浅谈JavaScript中的对象赋值

目录

常见的对象赋值方式

直接赋值和对象扩展(浅拷贝)两种赋值方式区别

区别

联系


常见的对象赋值方式

1. 直接赋值:this.info = this.deviceInfo,将一个对象的引用赋给另一个变量,它们引用同一个对象。

2. 对象扩展(浅拷贝):this.info = {...this.deviceInfo},使用对象扩展语法创建一个新对象,包含原对象的所有属性和值,但是它们引用不同的对象。

3. Object.assign() 方法(浅拷贝):this.info = Object.assign({}, this.deviceInfo),使用 Object.assign() 方法将一个或多个源对象的属性复制到目标对象,也是实现浅拷贝的一种方式。

4. JSON.parse() 和 JSON.stringify()(深拷贝):通过将对象转换为JSON字符串再解析回对象的方式,可以实现深拷贝,但是有一些限制,例如无法复制函数等特殊属性。

这些是常见的对象赋值方式,每种方式都有不同的特点和适用场景。

直接赋值和对象扩展(浅拷贝)两种赋值方式区别

区别

1. 引用 vs 新对象:

  • this.info = this.deviceInfo: 这种方式是引用赋值。this.info 和 this.deviceInfo 指向同一个对象。因此,对任一变量所做的修改都会影响到另一个,因为它们共享同一个内存地址。
  • this.info = {...this.deviceInfo}: 这种方式是浅拷贝。使用对象扩展语法 {...} 创建了一个新的对象,它具有与原始对象 this.deviceInfo 相同的顶层属性。但是,这两个对象是独立的,对 this.info 的修改不会影响 this.deviceInfo。

2. 深度拷贝与浅拷贝:

  • this.info = this.deviceInfo: 不涉及拷贝,只是引用。
  • this.info = {...this.deviceInfo}: 浅拷贝。如果 this.deviceInfo 的属性中包含其他对象或数组,这些属性在 this.info 中仍然是引用,不是独立的拷贝。
联系
  • 目的相同:两种方式都用于将 this.deviceInfo 的内容以某种形式赋给 this.info。
  • 语法简洁:都是通过简单的赋值语句完成,易于编写和理解。
  • 使用场景:选择使用哪种方式取决于是否需要原始数据的独立副本。如果需要独立操作数据而不影响原始数据,应选择浅拷贝或深拷贝;如果只是想共享同一数据集,可以使用引用赋值。

总结来说,选择哪种赋值方式取决于你的具体需求,是否需要数据之间的独立性。

相关文章:

  • LabVIEW中PID控制器系统的噪声与扰动抑制策略
  • 扫码报名活动时,如何避免重复报名?
  • Java18新特性有哪些
  • Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
  • LVS精益价值管理系统 DownLoad.aspx 任意文件读取漏洞复现
  • Unity中的MVC框架
  • C++ lambda表达式的作用和代码示例
  • autodl服务器中YOLOx训练自己数据集
  • 人脸识别系统之动态人脸识别
  • vscode 好用的插件
  • 程序员坐牢了,会被安排去写代码吗?
  • Reddisson的常用的yml配置选项
  • 百度云下载不限速方式集合
  • C#WPF数字大屏项目实战01--开发环境与项目创建
  • 用旧安卓手机当 linux 开发机
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Django 博客开发教程 16 - 统计文章阅读量
  • EventListener原理
  • JAVA_NIO系列——Channel和Buffer详解
  • JS变量作用域
  • maya建模与骨骼动画快速实现人工鱼
  • 闭包,sync使用细节
  • 初识MongoDB分片
  • 第十八天-企业应用架构模式-基本模式
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于游标的分页接口实现
  • C# - 为值类型重定义相等性
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​VRRP 虚拟路由冗余协议(华为)
  • !!Dom4j 学习笔记
  • # Redis 入门到精通(九)-- 主从复制(1)
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (4)事件处理——(7)简单事件(Simple events)
  • (javascript)再说document.body.scrollTop的使用问题
  • (Java数据结构)ArrayList
  • (二)PySpark3:SparkSQL编程
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (十六)Flask之蓝图
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • . Flume面试题
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .htaccess配置常用技巧
  • .net 7 上传文件踩坑
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net6 webapi log4net完整配置使用流程
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET学习教程二——.net基础定义+VS常用设置
  • /usr/bin/env: node: No such file or directory
  • @test注解_Spring 自定义注解你了解过吗?
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [1181]linux两台服务器之间传输文件和文件夹
  • [1525]字符统计2 (哈希)SDUT
  • [ACP云计算]易混淆知识点(考题总结)