Object.assign用法

news2024/11/26 12:35:33

Object.assign用法

Object.assign是什么?

  • 首先了解下Object.assign()是什么。我们先看看ES6官方文档是怎么介绍的?

  •   Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
      
      简单来说,就是Object.assign()是对象的静态方法,可以用来复制对象的可枚举属性到目标对象,利用这个特性可以实现对象属性的合并。
    
    

用法:

  •  Object.assign(target, ...sources)
     参数: target--->目标对象
           source--->源对象
           返回值:target,即目标对象
    
    

使用示例:

  • 目标对象和源对象无重名属性

  • var target={name:'guxin',age:25};
    var source={state:'single'}
    var result=Object.assign(target,source);
    console.log(target,target==result);
    
  • 结果如图:

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EahPGDpy-1686094927984)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686094707666.png)]

  • 我们可以看到source上的state属性合并到了target对象上。如果只是想将两个或多个对象的属性合并到一起,不改变原有对象的属性,可以用一个空的对象作为target对象。像下面这样:

  • var result=Object.assign({},target,source);
    
  • 目标对象和源对象有重名属性

  • 上面的示例目标对象和源对象是没有重名属性的,那么如果他们有重名属性又会怎样呢?是后面的属性覆盖前面的还是前面的属性覆盖后面的呢?我们接下来看下一个例子:

  • var target={name:'guxin',age:18}
    var source={state:'signle',age:22}
    var result=Object.assign(target,source)
    console.log(target)
    
  • 我们来看下运行结果:

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqzNWXcb-1686094927985)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686094762636.png)]

  • 可以看到如果有同名属性的话,后面的属性值会覆盖前面的属性值。

  • 有多个源对象

  • 前面的示例都是只有一个源对象,那么如果有多个源对象情况会不会不同呢?我们继续看下面的例子:

  •         var target={name:'guxin',age:18}
            var source1={state:'signle',age:22}
            var source2={mood:'happy',age:25}
            var result=Object.assign(target,source1,source2)
            console.log(target)
    
  • 我们来看下运行结果:

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DRx3XNbH-1686094927986)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686094813208.png)]

  • 可以看到有多个源对象情况也是和一个源对象一样的。没有同名的属性会直接复制到目标对象上,同名的属性后面的属性值会覆盖前面的同名属性值。

注意事项:

  • Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象,继承属性和不可枚举属性是不能拷贝的。
  • 针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。
  • 目标对象自身也会改变
  • 异常会打断后续拷贝任务

与$.extend()的比较

  • 我们通过一个简单的示例来比较两者有什么不同,

  •         var target={name:'guxin',age:18}
            var source1={state:'signle',age:22}
            var source2={mood:'happy',age:25}
            var result=Object.assign(target,source1,source2)
            console.log(target,'assign')
            var targetObj={name:'guxin',age:18}
            var sourceObj1={state:'signle',age:22}
            var sourceObj2={mood:'happy',age:25}
            var result=$.extend(targetObj,sourceObj1,sourceObj2)
            console.log(targetObj,'extend')
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jRgHyan-1686094927986)(C:\Users\quyanliang\AppData\Roaming\Typora\typora-user-images\1686094881680.png)]

  • 可以看到两者得到的结果是一样的。所以,我认为这两个方法,除了兼容性应该是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/621456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32超声波测距代码

操作思路: 初始化时将trig和echo端口都置低,首先向给trig 发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),然后等待,捕捉 echo 端输出上升沿,捕捉到上升沿的同时,打开定时…

(附源码)python音乐电台推荐系统的设计与实现 毕业设计 301210

音乐电台推荐系统 摘 要 随着人类向信息社会的不断迈进,风起云涌的信息时代正掀起一次新的革命,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的音乐电台推荐系统来管理音乐电台信息&#xff0…

OpenAI 接口文档-(中文版)-(一)

介绍 Introduction 您可以通过来自任何语言的 HTTP 请求、我们的官方 Python 绑定、我们的官方 Node.js 库或社区维护的库与 API 进行交互。 若要安装官方 Python 绑定,请运行以下命令: pip install openai 要安装官方的 Node.js 库,请在 No…

chatgpt赋能python:Python将空格改为换行符

Python将空格改为换行符 在Python编程中,经常需要对字符串进行处理,其中包括将空格替换为换行符。这篇文章将会介绍如何使用Python来实现这个目标,并分享一些关于字符串处理的技巧。 为什么要将空格改为换行符 将空格改为换行符可以让文本…

chatgpt赋能python:Python屏蔽一段代码

Python屏蔽一段代码 在Python编程中,有时我们需要屏蔽一段代码以便于调试或者测试。在很多情况下,我们可能不想删除这段代码,因为需要在将来的某个时间再次使用它。为了解决这个问题,我们可以使用Python中的注释语句或者条件语句…

Vue3中集成Unreal 5.2 像素流(Pixel Streaming插件)

目录 1. 创建一个Unreal项目2. 启用Pixel Streaming插件3. 下载Unreal 5.2对应的Pixel Streaming Infrastructure4. 创建一个Vue项目5. 推流方式一:使用Unreal Engine 5.26. 推流方式二:打包项目参考资源: 1. 创建一个Unreal项目 默认大家都…

机器人的免费使用方法

目录 一、机器人是什么? 二、机器人免费使用的方法: 第一点:电脑端 第二点:手机端 三、结语: 一、机器人是什么? 博主理解:方便生活,比Siri更加高级,能够智能的对我们…

chatgpt赋能python:Python就业前景分析

Python就业前景分析 Python已成为全球最流行的编程语言之一,因其易学、易用、高效、可扩展性强等特点,Python在各个领域都发挥着重要作用。Python的发展和应用迅猛,拥有Python编程经验的工程师在各个领域都面临着广泛的就业机会。 Python的…

推荐一个Edge浏览器中的一个好用问答插件。

目录 ChatGPT介绍:一、ChatGPT是什么?二、ChatGPT发展:三、ChatGPT 优点:四、Edge浏览器插件五、结语: ChatGPT介绍: 一、ChatGPT是什么? ChatGPT 是一个基于语言模型 GPT-3.5 的聊天机器人,ChatGPT模型是Instruct GPT的姊妹模型(siblingmodel&#x…

Sql Server 自动备份

Sql Server 自动备份 文章目录 Sql Server 自动备份1. 打开SQL Server,在管理下找到”维护计划”,右键点击”维护计划向导”,如图;2. 再次点击维护计划向导3. 在选择维护任务下勾选”备份数据库”、”清楚维护任务”4.选择需要备份…

ChatGPT应用于软件测试中的切入口(干货!)

以上均为本人原创,转载请说明出处,谢谢! 如果您觉得这篇文章还不错的话,请点击关注,转发,再看; 全是干货,话不多说 开搞! 1. 测试想法生成器 可以使用ChatGPT技术&…

宝塔反代教程+国内服务器访问openai api接口+502 Bad Gateway问题解决!

前言 宝塔反代教程国内服务器访问openai api接口502 Bad Gateway问题解决! 此方法最简单快捷,没有复杂步骤,不容易出错,即最简单,零代码、零部署的方法。 实现前提 一台海外VPSOpenAI官方的API_KEYChatGPT网站系统源码 ChatGP…

手机上谷歌的方法有哪些

google的方法 一般情况下,我们打开谷歌都是提示无法显示页面的,如图 先百度搜索下载一个能切换IP地址的软件 下载压缩包客户端到桌面上(没安装winRAR的童鞋请安装一下) 把客户端解压到桌面,双击里面的exe文件 输入注册好的账户和密码&#xf…

Spring项目启动报错java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException

文章目录 1.背景2.原因3.解决办法4.参考资料 1.背景 今天,在新设备上启动一个之前的项目的时候,发现启动不了了,报错 java.lang.NoClassDefFoundError : javax/xml/soap/SOAPException2.原因 网上查询了一下,大概的原因就是因为…

bert预训练梳理

BERT (Bidirectional Encoder Representation Transformers) 是在2018年由Google AI 团队发布的,虽然在此前刚发布不久的ELMo模型已经相比过去带来了很大的改善,但是BERT在各主流任务上取得的成绩仍然是一个质的飞跃。可以说,此后2-3年陆续出…

线程的start方法剖析

线程的start方法剖析 public synchronized void start() {if (threadStatus!0)throw new IllegalThreadStateException();group.add(this);boolean started false;try {start0();started true;} finally {try {if (!started){group.threadStartFailed…

javascript基础三十一:web常见的攻击方式有哪些?如何防御?

一、是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码,修改网站权限,获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要组成部分 确保Web应用程序安全十分重…

安裝系列 之《Ubuntu 22.04 Mysql 8.0 在线安装和设置静态IP》

为了以后我能直接用,特此记录下来,方便你我他。 开始安装 apt-get update sudo apt install mysql-server -y输入命令,直接安装 输入 mysql --version 就可以看到版本 然后,开始设置默认密码和允许外网访问 sudo mysql -uroot …

异步任务池

Java中的线程池设计得非常巧妙,可以高效并发执行多个任务,但是在某些场景下需要对线程池进行扩展才能更好地服务于系统。例如,如果一个任务仍进线程池之后,运行线程池的程序重启了,那么线程池里的任务就会丢失。另外&a…

Linux 配置系统白名单 gcc/g++

推荐书籍《程序员的自我修养》《深入理解计算机系统》 配置系统白名单 我们在使用普通用户的时候,有些时候需要使用 sudo 指令来对某一条指令直接进行权限提升,因为某一些指令可能因为使用的路径或者其他原因,普通用户没有权限使用这个命令&…