Amy 原创整理|资料核验:2026-10-31
【MDN事实】Object.assign把来源对象自身可枚举的属性写入目标,同名属性以后面的来源为准。它会触发读取器和设置器;如果写入不可写属性而抛出TypeError,报错之前已写入的属性可能留在目标中。
【教学示例】目标对象的locked属性不可写,来源按顺序有ready和locked。执行赋值时ready可能已经写入,随后才在locked处失败。因此catch到了错误,并不表示目标完全没变化。
【Amy建议】涉及共享配置时,先验证输入并在临时对象上形成候选结果,成功后再决定是否替换引用。即使使用临时对象,来源的getter仍可能执行;不要把Object.assign当作无副作用、保证原子性的更新机制。
官方来源:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign