Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การคัดลอกออบเจกต์ใน JavaScript: Object.assign() ไม่เปลี่ยนออบเจกต์ต้นทาง

การรวมออบเจกต์ด้วย Object.assign() แบบไม่เปลี่ยนต้นฉบับ

Object.assign() คัดลอก property จาก source ไป target โดย target แรกคือออบเจกต์ว่าง {} จะได้ออบเจกต์ใหม่ ไม่กระทบต้นทาง

ตัวอย่างโค้ด

var firstObject = { name: 'John' };
var secondObject = { name: 'Carol' };

console.log("ก่อนรวม = ");
console.log(firstObject); // { name: 'John' }

// รวม: target={}, source1=firstObject, source2=secondObject
var afterMerging = Object.assign({}, firstObject, secondObject);
afterMerging.name = 'Smith'; // เปลี่ยนค่าในออบเจกต์ใหม่

console.log("หลังรวม = ");
console.log(firstObject); // { name: 'John' } - ไม่เปลี่ยน!
console.log(afterMerging); // { name: 'Smith' }

วิธีรัน

node fileName.js

ผลลัพธ์

ก่อนรวม = { name: 'John' }
หลังรวม = { name: 'John' }

คำอธิบาย

  • Object.assign(target, ...sources) คัดลอก property ตามลำดับ source ทับซ้อนกัน
  • ส่ง {} เป็น target แรก → สร้างออบเจกต์ใหม่ ไม่ mutate ต้นทาง
  • เป็น Shallow Copy: nested object ยังอ้างอิงเดิมอยู่

วิธีทันสมัย: Spread Operator

const merged = { ...firstObject, ...secondObject };
merged.name = 'Smith';
console.log(firstObject); // { name: 'John' } - ไม่เปลี่ยน