Object.assign详解

这篇具有很好参考价值的文章主要介绍了Object.assign详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Object.assign是什么?

二、用法:

三、详细讲解

1.目标对象和源对象没有同名属性

2.目标对象和源对象有同名属性

3.有多个源对象

4、原始类型会被包装为对象

5、对象的拷贝

6、对象的深拷贝

7、对象的深拷贝

总结


一、Object.assign是什么?

object.assign()主要用于对象合并,将源对象中的属性复制到目标对象中,他将返回目标对象。

二、用法:

Object.assign(target, ...sources)

参数:target--->目标对象

           source--->源对象

返回值:target,目标对象

三、详细讲解

1.目标对象和源对象没有同名属性

var target = {name:'带你飞'}
var source = {age:18}
var result = Object.assign(target,source)
console.log(result,target===result); // {name: '带你飞', age: 18} true

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

var result=Object.assign({},target,source);

2.目标对象和源对象有同名属性

var target = {name:'带你飞',age:16}
var source = {age:18}
var result = Object.assign(target,source)
console.log(result,target===result); // {name: '带你飞', age: 18} true

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

3.有多个源对象

var target = {name:'带你飞',age:16}
var source1 = {age:18}
var source2 = {age:20,hobby:'打游戏'}
var result = Object.assign(target,source1,source2)
console.log(result,target===result); // {name: '带你飞', age: 20, hobby: '打游戏'} true

如果有多个源对象,没有同名的属性会直接复制到目标对象上,如果有同名属性的话,后面的属性值会覆盖前面的属性值。

4、原始类型会被包装为对象

var source1 = "abc";
var source2 = true;
var source3 = 10;

var result = Object.assign({}, source1, null, source2, undefined, source3); 
// 原始类型会被包装,null 和 undefined 会被忽略。
// 注意,只有字符串的包装对象才可能有自身可枚举属性。
console.log(result); // {0: 'a', 1: 'b', 2: 'c'}

5、对象的拷贝

var object1 = {
  a: 1,
  b: 2,
  c: 3
};

var object2 = Object.assign({c: 4, d: 5}, object1);

console.log(object2.c, object2.d); // 3 5
console.log(object1)  // { a: 1, b: 2, c: 3 }
console.log(object2)  // { c: 3, d: 5, a: 1, b: 2 }
Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。

6、对象的深拷贝

深拷贝:深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突。

let object1 = {
		a: 1,
		b: 2
	};

	let object2 = Object.assign({}, object1, {
		b: 20
	});

	console.log(object1); // { a: 1, b: 2 }
	console.log(object2); // { a: 1, b: 20 }

7、对象的浅拷贝

浅拷贝:浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝

var object1 = {
		a: 1,
		b: {
			c: 2,
			d: 3
		}
	};
var object2 = Object.assign({}, object1);
	object2.a = 10;
	object2.b.c = 20;
	console.log(object1); // { a: 1, b: { c: 20, d: 3 } }
	console.log(object2) //{ a: 10, b: { c: 20, d: 3} }

总结:

      object.assign()主要用于对象合并,将源对象中的属性复制到目标对象中,他将返回目标对象。如果有同名属性的话,后面的属性值会覆盖前面的属性值,如果有多个源对象,没有同名的属性会直接复制到目标对象上,还可以进行对象的深浅拷贝,当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

以上内容纯属个人理解,如果有朋友发现不对的欢迎随时指正!文章来源地址https://www.toymoban.com/news/detail-413411.html

到了这里,关于Object.assign详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在JavaScript中,Object.assign()方法或展开语法(...)来合并对象,Object.freeze()方法来冻结对象,防止对象被修改

    一、Object.freeze()方法来冻结对象,防止对象被修改 Object.freeze() 是JavaScript中的一个方法,用于冻结一个对象。被冻结的对象不能再被修改。具体来说,它做了两件事情: 防止添加新的属性:尝试添加新属性将失败,不会抛出错误,但新属性不会被添加到对象中。 防止删除属

    2024年02月02日
    浏览(41)
  • 【Python】成功解决TypeError: ‘tuple‘ object does not support item assignment

    【Python】成功解决TypeError: ‘tuple’ object does not support item assignment 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关

    2024年03月15日
    浏览(47)
  • Object.values()的用法

    Object.keys() 一、官方定义 Object.values() 方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用 for…in 循环的顺序相同(区别在于 for-in 循环枚举原型链中的属性)。 二、语法 Object.values(obj) 参数 obj 被返回可枚举属性值的对象。 返回值 一个包含对象自身的所

    2024年02月14日
    浏览(37)
  • Kafka消费者订阅指定主题(subscribe)或分区(assign)详解

    在连接Kafka服务器消费数据前,需要创建Kafka消费者进行拉取数据,需要配置相应的参数,比如设置消费者所属的消费者组名称、连接的broker服务器地址、序列号和反序列化的方式等配置。 更多消费者配置可参考官网: https://kafka.apache.org/documentation/#consumerconfigs 订阅主题(s

    2023年04月24日
    浏览(45)
  • python中针对同一目录或不同目录下的其他文件或文件夹的import用法

    在Python中, import 用于导入其他文件或模块的内容,让你可以在当前文件中使用这些内容。下面我将介绍如何使用 import 来导入同一目录或不同目录下的文件或文件夹。 1. 导入同一目录下的文件或模块: 如果你要导入与当前文件位于同一目录下的文件或模块,可以直接

    2024年02月14日
    浏览(50)
  • 【Nuxt3】目录中components文件夹的用法

    在Nuxt3中,components文件夹和vue文件夹用处一样,都是放置vue公共组件的地方。只不过由于Nuxt3中components文件内的组件自动导入机制,用法些许不同。 components/ 目录是你放置所有 Vue 组件的地方。 Nuxt 会自动导入该目录中的所有组件(以及您可能使用的任何模块注册的组件)。

    2024年01月19日
    浏览(35)
  • 什么是目标检测--Object Detection

    目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。目标检测不仅要用算法判断图片中物品的分类, 还要在图片中标记出它的位置, 用边框或红色方框把物品圈起来, 这就

    2024年02月07日
    浏览(46)
  • (详解)Object.keys() Object.values() Object.entries()

    目录 一、Object.keys(obj)  二、Object.values() 三、Object.entries() 参数:要返回其枚举自身属性的对象 返回值:一个表示给定对象的所有 可枚举属性的字符串数组 处理对象,返回可枚举的属性数组         2.处理数组,返回索引值数组         3.处理字符串,返回索引值数组

    2024年02月04日
    浏览(38)
  • Object.prototype.toString为什么要加.call

    因为Array和Function等的toString方法都重写了,只有Object的没有被重写,所以只有Object.prototype才可以判断数据类型 如果不加.call()的话,this指向为Object,Object的数据类型自然是Object,所以不管判断啥都是Object; 添加call之后,改变this指向arr.才能得到正确的类型结果 理论上使用ap

    2024年04月17日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包