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 } } } //克隆生成的對象是獨立的,克隆對象和源對象互不影響