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

【JS学习】Object.assign 用法介绍

Object.assign 是ES6中的一个方法。该方法能够实现对象的浅复制以及对象合并。Object.assign 并不会修改目标对象本身,而是返回一个新的对象,其中包含了所有源对象的属性。

例1 2个对象合并

const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };const mergedObject = Object.assign(target, source);console.log(mergedObject);  // { a: 1, b: 3, c: 4 }
console.log(target);         // { a: 1, b: 3, c: 4 }

上述例子中,mergedObject 是合并了 target 和 source 的属性的新对象。其中 target 对象的 b 属性的值被从源对象 source 中继承并覆盖了。

例2 多个对象合并到一个目标对象中

const target = {};
const source1 = { a: 1 };
const source2 = { b: 2 };const mergedObject = Object.assign(target, source1, source2);console.log(mergedObject);  // { a: 1, b: 2 }

Object.assign 是浅复制。它只会复制对象的属性的引用,而不会递归复制嵌套对象。如果源对象包含对象属性,复制后的结果中仍然 引用 相同的嵌套对象。这意味着,无论在哪个对象中修改这个嵌套对象,所有引用该对象的地方都会受到影响,因为它们引用的是同一个对象。

const target = {};
const source = { nested: { a: 1 } };const mergedObject = Object.assign(target, source);console.log(mergedObject);  // { nested: { a: 1 } }
console.log(mergedObject.nested === source.nested);  // true
  • 当涉及深层嵌套对象并使用浅复制时,改变一个对象的嵌套属性会影响所有引用该属性的对象,因为它们实际上引用的是相同的对象。
// 原始的源对象
const source = {nested: {a: 1,b: {c: 2}}
};// 使用 Object.assign 进行浅复制
const target = Object.assign({}, source);// 修改深层嵌套对象的属性
target.nested.b.c = 3;console.log(source);  // { nested: { a: 1, b: { c: 3 } } }
console.log(target);  // { nested: { a: 1, b: { c: 3 } } }
console.log(source === target);  // false
console.log(source.nested === target.nested);  // true
console.log(source.nested.b === target.nested.b);  // true

在这个例子中,当我们修改 target.nested.b.c 的值时,source 对象的相应属性也会被修改,因为 source.nestedtarget.nested 引用同一个嵌套对象。尽管 source 和 target 对象不是同一个对象,但它们的嵌套属性引用是相同的,因此修改一个对象的属性会影响到另一个对象。

http://www.lryc.cn/news/126585.html

相关文章:

  • 【uni-app报错】获取用户收货地址uni.chooseAddress()报错问题
  • 机器学习、cv、nlp的一些前置知识
  • Steam 灵感的游戏卡悬停效果
  • [Openwrt]一步一步搭建MT7981A uboot、atf、openwrt-21.02开发环境操作说明
  • Unity C# 之 Azure 微软SSML语音合成TTS流式获取音频数据以及表情嘴型 Animation 的简单整理
  • 安全学习DAY16_信息打点-CDN绕过
  • genism word2vec方法
  • vue3自定义样式-路由-axios拦截器
  • 【mysql】事务的四种特性的理解
  • C++中List的实现
  • ElementUI 树形表格的使用以及表单嵌套树形表格的校验问题等汇总
  • 解决“Unable to start embedded Tomcat“错误的完整指南
  • JVS开源基础框架:平台基本信息介绍
  • C++ - max_element
  • 聚隆转债上市价格预测
  • pytest自动生成测试类 demo
  • 服务器卡顿了该如何处理
  • 常量对象 只能调用 常成员函数
  • Progressive-Hint Prompting Improves Reasoning in Large Language Models
  • mysql中INSERT INTO ... ON DUPLICATE KEY UPDATE的用法,以及与REPLACE INTO 语句用法的异同
  • wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容)
  • MATLAB图形窗口固定
  • 【数据结构】_7.二叉树概念与基本操作
  • Flink之Partitioner(分区规则)
  • tk切换到mac的code分享
  • spark的standalone 分布式搭建
  • 浅析基于视频汇聚与AI智能分析的新零售方案设计
  • SpringMVC之异常处理
  • 保险龙头科技进化论:太保的六年
  • 升级STM32电机PID速度闭环编程:从F1到F4的移植技巧与实例解析