JavaScript 拷贝笔记
1. 浅拷贝
浅拷贝只复制对象的第一层属性,如果属性是引用类型,拷贝的是引用地址。
1 2 3 4 5
| const obj = { a: 1, b: { c: 2 } }; const copy = { ...obj };
copy.b.c = 3; console.log(obj.b.c);
|
1 2 3 4
| const arr = [1, [2, 3]]; const arrCopy = [...arr]; arrCopy[1][0] = 99; console.log(arr[1][0]);
|
2. 深拷贝
深拷贝会递归复制对象及其嵌套对象,完全独立。
1
| const deepCopy = JSON.parse(JSON.stringify(obj));
|
1 2 3 4 5 6 7 8 9 10 11 12
| function deepClone(obj, map = new WeakMap()) { if (typeof obj !== 'object' || obj === null) return obj; if (map.has(obj)) return map.get(obj); const clone = Array.isArray(obj) ? [] : {}; map.set(obj, clone); for (const key in obj) { if (obj.hasOwnProperty(key)) { clone[key] = deepClone(obj[key], map); } } return clone; }
|