Object.assign()介绍
Object.assign()方法用于将一个或多个源对象的可枚举属性复制到目标对象中,并返回目标对象。它基于浅复制原则,只复制对象自身的属性,不复制继承自原型链上的属性。如果目标对象已经存在相同属性,则源对象的属性将覆盖目标对象的属性。
语法
Object.assign(target, ...sources)
- `target`:目标对象,要将属性复制到的对象。
- `sources`:一个或多个源对象,从中复制属性的对象。
情况一:如果后面对象的属性,比如source中存在属性b,而目标对象(第一个参数)中也存在属性b,则source里的属性b值,会覆盖前面的属性b值
// 复制对象,存在相同key,则后面覆盖前面的
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 4, c: 5 }
情况二:Object.assign() 会改变第一个对象的值,后面对象的值不会改变
// 会改变第一个对象的值,后面的对象值不会变,遇到相同key,后面的值会覆盖前面的
const target1 = { a: 1, b: 2 };
const source1 = { b: 4, c: 5, d: 6};
Object.assign(target1, source1);
console.log(target1); // { a: 1, b: 4, c: 5, d: 6 }
console.log(source1); // { b: 4, c: 5, d: 6 }
情况三:如果想合并几个对象生成新的对象,并对原来的对象内容无影响,可以将Object.assign()的第一个参数设为空对象
// 合并对象
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 4, c: 5 };
const obj3 = { d: 6 };
const merged = Object.assign({}, obj1, obj2, obj3);
console.log(merged); // { a: 1, b: 4, c: 5, d: 6 }
所有代码:
// 复制对象
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 4, c: 5 }
// 会改变第一个对象的值,后面的对象值不会变,遇到相同key,后面的值会覆盖前面的
const target1 = { a: 1, b: 2 };
const source1 = { b: 4, c: 5, d: 6};
Object.assign(target1, source1);
console.log(target1); // { a: 1, b: 4, c: 5, d: 6 }
console.log(source1); // { b: 4, c: 5, d: 6 }
// 合并对象
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 4, c: 5 };
const obj3 = { d: 6 };
const merged = Object.assign({}, obj1, obj2, obj3);
console.log(merged); // { a: 1, b: 4, c: 5, d: 6 }
注意事项
- Object.assign()方法不会拷贝对象的不可枚举属性、原型链属性以及方法。
- 当源对象含有getter时,会触发getter的执行。
Object.assign()是浅复制,所以在处理嵌套对象时需要小心。
Object.assign()方法是一个非常有用的工具,可以用于对象属性的复制和合并。它可以帮助我们轻松地操作对象,处理属性赋值和合并等任务。