Object.assign()的作用

Object.assign()方法用于合并对象,将源对象的属性复制到目标对象中。在处理同名属性时,后面的值会覆盖前面的值。当涉及多个源对象时,按顺序覆盖。对于原始类型,它们会被包装为对象。注意,Object.assign()执行的是浅拷贝,对于嵌套的对象,只复制引用,而非创建新对象。对于深拷贝需求,需要其他方法来实现。
摘要由CSDN通过智能技术生成

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
    
  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 }
    
  6. 对象的深拷贝:
    Tips:深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突。
    这里是进行一个类似于深拷贝的操作,不是深拷贝,如果将Object.assign中的{}去掉,那么object1中的c也将随之更改为c:{d:20}
    let object1 = {
    		a: 1,
    		b: 2c: {
    		d:10
    		}
    	};
    let object2 = Object.assign({}, obj1, {
    	c:{d: 20}
    });
    console.log(object1); // { a: 1, b: 2, c:{d:10}}
    console.log(object2); // { a: 1, b: 2, c:{d:20}}
    
  7. 对象的浅拷贝:
    Tips:浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。
    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} }
    
    注意事项
    1、Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象,继承属性和不可枚举属性是不能拷贝的。
    2、针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。
    3、目标对象自身也会改变
    4、异常会打断后续拷贝任务
    5. ie不兼容此写法

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

参考链接如下: [1]: https://blog.csdn.net/weixin_47619284/article/details/125900605

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值