JavaScript:Object.assign()的理解

本文详细介绍了JavaScript中的Object.assign()方法,包括其功能(属性复制、浅拷贝、覆盖机制)、用法示例以及引用类型的处理。重点强调了该方法的浅复制特性,即只复制一层属性,不递归复制嵌套对象。

作用:Object.assign()是一个方法,用于将一个或多个源对象的属性复制到目标对象中,返回复制完成后的目标对象

Object.assign(target, ...sources)
其中,target 是目标对象,sources是一个或多个源对象,它们的可枚举属性将会被复制到目标对象中。Object.assign()方法是浅拷贝的,它只会复制对象的一层属性,如果属性值是对象,则复制的是对象的引用。

理解:

  1. Object.assign会将source(源对象)里面的可枚举属性复制到target(目标对象),如果和target的已有属性重名,则会覆盖。
  2. 后续的source会覆盖前面的source的同名属性
  3. Object.assign方法执行的是浅拷贝:只会复制对象的第一层属性,而不会递归地复制嵌套对象的属性。如果源对象的属性值是对象或者数组等引用类型,那么目标对象中对应的属性仍然会引用同一个内存地址,修改其中一个对象的属性值会影响到另一个对象

代码示例:
①对象属性复制: Object.assign() 方法将源对象的可枚举属性复制到目标对象中

const target = {};
const source = { foo: 1, bar: 2 };
Object.assign(target, source);
console.log(target); // 输出:{ foo: 1, bar: 2 }

const sourceArray = [1, 2, 3];  
const targetObject = {};
Object.assign(targetObject, sourceArray);
console.log(targetObject); // 输出:{}
console.log(targetObject.length); // 输出:undefined,数组的length属性是不可枚举属性

②多个源对象: 可以传入多个源对象,它们的属性会依次复制到目标对象中,后面的源对象会覆盖前面的源对象

const target = {};
const source1 = { foo: 1 };
const source2 = { bar: 2 };
Object.assign(target, source1, source2);
console.log(target); // 输出:{ foo: 1, bar: 2 }

③属性覆盖: 如果目标对象中已经有相同属性名的属性,则后面的源对象会覆盖之前的值

const target = { foo: 1, bar: 2 };
const source = { bar: 3, baz: 4 };
Object.assign(target, source);
console.log(target); // 输出:{ foo: 1, bar: 3, baz: 4 }

④引用复制: Object.assign() 方法是浅拷贝的,如果属性值是对象,则复制的是对象的引用

const obj1 = { a: { b: 1 } };
const obj2 = {};
Object.assign(obj2, obj1);
console.log(obj2); // 输出:{ a: { b: 1 } }
obj1.a.b = 2;
console.log(obj2); // 输出:{ a: { b: 2 } }(obj2.a.b 也被修改)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值