Spread is often cleaner than Object.assign:
let defaults = { color: "blue", size: "medium" }
let options = { size: "large" }
let merged = { ...defaults, ...options }
console.log(merged) // { color: "blue", size: "large" }
// Add/override specific properties
let updated = { ...merged, color: "red", newProp: true }
Later spreads override earlier ones. Order matters.