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 } }
}

//克隆生成的對象是獨立的,克隆對象和源對象互不影響

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM