js实现一个浅拷贝
JavaScript 浅拷贝实现方法
方法一:使用展开运算符(Spread Operator)
const original = { a: 1, b: { c: 2 } };
const copy = { ...original };
展开运算符会复制对象的所有可枚举自有属性到新对象中。对于嵌套对象,只复制引用而非创建新对象。
方法二:使用 Object.assign()
const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);
Object.assign() 将源对象的所有可枚举属性复制到目标对象并返回目标对象。同样只处理第一层属性的拷贝。
方法三:数组浅拷贝(slice 方法)
const originalArray = [1, 2, { a: 3 }];
const copiedArray = originalArray.slice();
数组的 slice() 方法不带参数时,会返回原数组的浅拷贝副本。对于数组中的对象元素,同样只复制引用。
方法四:数组浅拷贝(concat 方法)
const originalArray = [1, 2, { a: 3 }];
const copiedArray = [].concat(originalArray);
空数组与原始数组的 concat 操作会生成新的数组副本,实现浅拷贝效果。

注意事项
- 浅拷贝只复制对象的第一层属性
- 嵌套对象仍然保持引用关系
- 修改拷贝对象的嵌套属性会影响原对象
- 适用于简单数据结构或明确不需要深拷贝的场景
浅拷贝与深拷贝的区别示例
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };
// 修改第一层属性
shallowCopy.a = 3; // 不影响原对象
console.log(original.a); // 输出 1
// 修改嵌套属性
shallowCopy.b.c = 4; // 影响原对象
console.log(original.b.c); // 输出 4
这个示例清晰地展示了浅拷贝对第一层属性和嵌套属性的不同处理方式。






