Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。合并具有相同属性的对象时,属性被后续参数中具有相同属性的其他对象覆盖。它将返回目标对象。说到属性复制可能会深拷贝、浅拷贝等问题。
最简单的用法:
// 最简单的用法
const resourceA = {
a: 1,
b: 2,
c: 3,
friends: [1, 2, 3],
info: {
name: 'a'
}
};
const target = Object.assign({}, resourceA);
console.log(target.a); //1
// 当属性值为基本类型时,拷贝属性值
target.a = 2;
console.log(resourceA.a); // 1
// 当属性值为引用类型时,拷贝属性引用
console.log(target.friends === resourceA.friends); // true => 属性的值拷贝
target.info.name = 'b';
console.log(target.info.name); // b
console.log(resourceA.info.name); // b
console.log(resourceA.info === target.info); // true
// 被合并的对象自身也会变
var obj1 = {name: 'obj1'};
var obj2 = {name: 'obj2'};
Object.assign(obj1, obj2);
console.log(obj1.name); //obj2
// 不支持深拷贝
var stu1 = {
info: {
name: 'stu1'
}
};
var stu2 = {
info: {
age: 23
}
};
var res = Object.assign(stu1, stu2);
console.log(JSON.stringify(res)); //{"info":{"age":23}}
备注:对深复制和浅复制通俗的理解:浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。