Object.assign() 通过复制一个或多个对象来创建一个新的对象。
1. 将obj1放在第一个参数上面会导致obj1也改变 不要忘记对象的地址引用关系
let obj1 = {
a:1,
b:2,
c:3
}
let obj2 = Object.assign(obj1,{aaa:1,bbb:2},{ccc:3},{ddd:4});
console.log(obj1);
console.log(obj2);
// 运行结果
// {a: 1, b: 2, c: 3, aaa: 1, bbb: 2, …}
// a: 1
// aaa: 1
// b: 2
// bbb: 2
// c: 3
// ccc: 3
// ddd: 4
// __proto__: Object
// {a: 1, b: 2, c: 3, aaa: 1, bbb: 2, …}
// a: 1
// aaa: 1
// b: 2
// bbb: 2
// c: 3
// ccc: 3
// ddd: 4
// __proto__: Object
2. 在第一个参数上面放一个空的对象 那么就不会有什么问题了
let obj1 = {
a:1,
b:2,
c:3
}
let obj2 = Object.assign({},obj1,{aaa:1,bbb:2},{ccc:3},{ddd:4});
console.log(obj1);
console.log(obj2);
// 运行结果
// {a: 1, b: 2, c: 3}
// a: 1
// b: 2
// c: 3
// __proto__: Object
// {a: 1, b: 2, c: 3, aaa: 1, bbb: 2, …}
// a: 1
// aaa: 1
// b: 2
// bbb: 2
// c: 3
// ccc: 3
// ddd: 4
// __proto__: Object
3. 多种类型合并,会将所有的可枚举属性都拷贝一遍,不过需要注意的是,合并的对象如果有引用类型,那么这是属于浅拷贝的
let obj1 = {
a:null,
b:undefined,
c:function name(params) {
console.log(params);
},
d:{},
e:[],
f:123
}
let obj2 = Object.assign({},obj1);
console.log(obj1);
console.log(obj2);
// 运行结果
// {a: null, b: undefined, d: {…}, e: Array(0), c: ƒ, …}
// a: null
// b: undefined
// c: ƒ name(params)
// d: {}
// e: []
// f: 123
// __proto__: Object
// {a: null, b: undefined, d: {…}, e: Array(0), c: ƒ, …}
// a: null
// b: undefined
// c: ƒ name(params)
// d: {}
// e: []
// f: 123
// __proto__: Object