Cả hai đều shallow copy. Object.assign() copy vào object đích hiện có, trigger setters trên target. Spread tạo plain object mới, không trigger setters.
Object.assign() copy enumerable own properties bao gồm cả Symbol. Với nested objects, cả hai chỉ copy reference, không deep copy.
javascript
const target = { a: 1 };
const result = Object.assign(target, { b: 2 }); // mutates target
const spread = { ...target, c: 3 }; // new object