Objects are assigned by reference, so b = a doesn't copy — both point to the same object. A shallow copy duplicates the top level but shares nested references; a deep copy duplicates everything, fully independent.
js
const original = { name: "Ann", address: { city: "NY" } };
// shallow copy: spread / Object.assign
const shallow = { ...original };
shallow.name = "Bob"; // ✅ independent (top-level primitive)
shallow.address.city = "LA"; // ⚠️ ALSO changes original.address.city — shared!
original.address.;
嵌套的 address 对象在两者中都是相同的引用,所以修改它会影响两者。
为什么这很重要
js
const deep = structuredClone(original); // modern, built-in, handles most types
deep.address.city = "Chicago"; // ✅ original is untouched
其他选项及其注意事项:
js
JSON.parse(JSON.stringify(obj)); // simple, but LOSES functions, Dates → strings, undefined
// lodash: _.cloneDeep(obj) // robust, for complex cases
这是
