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

JavaScript 中,不同的赋值方式适用场景

在 JavaScript 中,不同的赋值方式适用于不同的场景。以下是每种赋值方式的详细解释和使用场景:

1. 使用扩展运算符 ... 进行浅拷贝

let obj = { ...data };
  • 功能:创建一个新的对象,并将 data 对象的所有可枚举属性复制到新对象中。
  • 适用场景:适用于简单对象的浅拷贝,特别是当对象的属性不包含嵌套对象或数组时。

示例:

let data = { a: 1, b: 2 };
let obj = { ...data };
console.log(obj); // { a: 1, b: 2 }

2. 使用 JSON.parse(JSON.stringify(obj)) 进行深拷贝

let newObj = JSON.parse(JSON.stringify(obj));
  • 功能:创建一个新的对象,并将 obj 对象及其嵌套对象和数组进行深拷贝。
  • 适用场景:适用于需要深拷贝的场景,特别是当对象包含嵌套对象或数组时。
  • 限制:无法处理函数、undefinedNaNInfinityDate 对象(会转换为 ISO 字符串)、RegExp 对象(会转换为空对象)、Error 对象(会转换为空对象)等。

示例:

let data = { a: 1, b: { c: 2 } };
let newObj = JSON.parse(JSON.stringify(data));
console.log(newObj); // { a: 1, b: { c: 2 } }

3. 使用 Object.assign() 进行浅拷贝

Object.assign(formData, row);
  • 功能:将 row 对象的所有可枚举属性复制到 formData 对象中。如果 formDatarow 有相同的属性,row 中的属性值会覆盖 formData 中的属性值。
  • 适用场景:适用于需要合并对象属性的场景,特别是当需要保留目标对象的引用时。

示例:

let formData = { a: 1, b: 2 };
let row = { b: 3, c: 4 };
Object.assign(formData, row);
console.log(formData); // { a: 1, b: 3, c: 4 }

4. 使用数组的扩展运算符 ... 进行浅拷贝

stateTable.table.data = [...data];
  • 功能:创建一个新的数组,并将 data 数组的所有元素复制到新数组中。
  • 适用场景:适用于需要浅拷贝数组的场景,特别是当数组的元素不包含嵌套对象或数组时。

示例:

let data = [1, 2, 3];
let newData = [...data];
console.log(newData); // [1, 2, 3]

总结

  • ... 扩展运算符:适用于简单对象或数组的浅拷贝。
  • JSON.parse(JSON.stringify(obj)):适用于需要深拷贝的场景,特别是当对象包含嵌套对象或数组时。
  • Object.assign():适用于需要合并对象属性的场景,特别是当需要保留目标对象的引用时。

http://www.kler.cn/news/284202.html

相关文章:

  • OpenAI“草莓项目”最快今年秋季发布!苹果将于9月10号推出首款AI iPhone|AI日报
  • C/C++ 编译过程概述
  • 睡岗检测数据集(工作 课堂等) 3100张 增强 睡岗趴睡 带标注 voc yolo
  • Springboot3整合ELK实现日志可视化
  • Spring Boot中Tomcat、Jetty、Undertow哪个嵌入式服务器最好?
  • 线性代数基础
  • 实训day29(8.15)
  • 探索未知,悦享惊喜 —— 您的专属盲盒小程序,即将开启奇妙之旅
  • Qt窗口 菜单栏 QMenuBar和的使用及说明
  • 全局页面数据渲染--SAAS本地化及未来之窗行业应用跨平台架构
  • 手机二要素api接口是什么?怎么对接使用?
  • FFmpeg的入门实践系列六(编程入门之常见处理流程)
  • 生信机器学习入门3 - Scikit-Learn训练机器学习分类感知器
  • 巧用scss实现一个通用的媒介查询代码
  • Java算法之希尔排序(Shell Sort)
  • 09:Logic软件原理图信号连通
  • LuaJit分析(九)LuaJit中的JIT原理分析
  • Codeforces Round 969 (Div. 2 ABCDE题) 视频讲解
  • 热门跨境平台的IP代理如何选择?入局IP知识
  • Python编写BC260Y TCP数据收发压力测试脚本
  • 创建SQLiteOpenHelper 类来创建和管理SQLite数据库
  • vue2踩坑记录:el-select如何绑定对象
  • 二叉树详解(2)
  • Ethercat设备数据 转IEC61850项目案例
  • zyx青岛实训day34 初步了解Docker与套接字的应用
  • 行为模式7.解释器模式------DSL语言
  • Linux动态库搜索路径相关知识文章
  • UE4 使用AndroidGameDevelopmentExtension(AGDE)对安卓客户端做“断点调试”与“代码热更”
  • Nginx代理MinIO界面
  • Vue.js入门系列(十八):利用浏览器本地存储实现TodoList数据持久化