Array.prototype.concat()可实现数组浅拷贝,因其不修改原数组,仅返回新数组,且只复制第一层元素引用,对嵌套对象仍共享同一引用。

Array.prototype.concat() 可以实现数组的浅拷贝,原理是它不修改原数组,而是返回一个由原数组元素(或传入参数)组成的新数组。
concat() 浅拷贝的基本用法
调用时传入空数组或不传参,即可生成原数组的一个浅拷贝:
-
[1, 2, 3].concat()→[1, 2, 3] -
[1, 2, 3].concat([])→[1, 2, 3]
为什么是“浅拷贝”?
concat 只复制第一层元素引用。如果原数组包含对象、数组等引用类型,新数组中对应位置仍是同一个引用:
const arr = [1, {a: 2}];const copy = arr.concat();-
copy[1].a = 99;→arr[1].a也会变成99
对比其他浅拷贝方式
concat 和以下方法效果一致(都只浅拷贝):
-
[...arr](扩展运算符) arr.slice()Array.from(arr)
它们都不改变原数组,且对嵌套对象/数组无递归处理能力。
注意点:避免意外拼接
不要误写成 arr.concat(arr),这会把原数组拼两次,得到 [...arr, ...arr];要浅拷贝就只调用 .concat() 或 .concat([])。


















