Object.assign方法复制或合并对象
Object.assign()
方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象
1 var obj = { a: 1 }; 2 var copy = Object.assign({}, obj); 3 console.log(copy); // { a: 1 }
合并对象
1 var o1 = { a: 1 }; 2 var o2 = { b: 2 }; 3 var o3 = { c: 3 }; 4 var obj = Object.assign(o1, o2, o3); 5 console.log(obj); // { a: 1, b: 2, c: 3 } 6 console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变
深度拷贝
假如需要深度拷贝的话,仍旧需要使用别的而不是本方法。因为 Object.assign() 拷贝的是在 source 里是
对象的属性的引用而不是对象本身
function test() { let a = { b: {c:4} , d: { e: {f:1}} } let g = Object.assign({},a) let h = JSON.parse(JSON.stringify(a)); //克隆a对象 console.log(g.d) // { e: { f: 1 } } g.d.e = 32 console.log('g.d.e set to 32.') // g.d.e set to 32. console.log(g) // { b: { c: 4 }, d: { e: 32 } } console.log(a) // { b: { c: 4 }, d: { e: 32 } } console.log(h) // { b: { c: 4 }, d: { e: { f: 1 } } } h.d.e = 54 console.log('h.d.e set to 54.') // h.d.e set to 54. console.log(g) // { b: { c: 4 }, d: { e: 32 } } console.log(a) // { b: { c: 4 }, d: { e: 32 } } console.log(h) // { b: { c: 4 }, d: { e: 54 } } } //克隆生成的对象是独立的,克隆对象和源对象互不影响