concat()方法不修改原数组,返回新数组:将参数数组元素展开或值直接追加到调用数组末尾,支持链式调用和一层嵌套展开,兼容性好但不如扩展运算符简洁。

concat 是 JavaScript 中用于合并数组的原生方法,它不会修改原数组,而是返回一个新数组。
基本用法:合并两个或多个数组
调用 concat() 时,传入一个或多个数组(或值),它会将这些内容依次追加到调用它的数组末尾,生成并返回新数组。
- 第一个参数是调用者本身(即左侧数组),后续参数是要合并进来的数组或值
- 如果传入的是数组,会把该数组的每个元素展开后加入;如果是普通值(如数字、字符串),则直接作为元素添加
- 支持链式调用,因为返回的是新数组
例如:[1, 2].concat([3, 4], [5]) 返回 [1, 2, 3, 4, 5];[1].concat(2, [3, 4], 5) 返回 [1, 2, 3, 4, 5]。
处理嵌套数组:concat 不会深层扁平化
concat() 只做一层展开,遇到嵌套数组时,只拆开最外层,内部数组仍保持原样。
立即学习“Java免费学习笔记(深入)”;
- [1].concat([[2, 3], 4]) 得到 [1, [2, 3], 4],不是 [1, 2, 3, 4]
- 如需完全扁平化,可配合 flat() 使用:[1].concat([[2, 3], 4]).flat()
替代方案对比:为什么有时不用 concat
现代开发中,扩展运算符(...)更常用,写法更简洁直观:
- 等价写法:[1, 2].concat([3, 4]) ⇔ [...[1, 2], ...[3, 4]]
- 扩展运算符支持任意可迭代对象(如 Set、Map 的键/值),而 concat 对非数组参数会原样插入
- 性能上差异不大,但扩展运算符在多数场景下语义更清晰
兼容性与注意事项
concat() 兼容所有浏览器和 Node.js 环境,包括旧版 IE。
- 传入 null 或 undefined 会被当作普通值加入结果数组
- 对类数组对象(如 arguments)无效,需先转为真数组再使用
- 若想合并对象数组并去重或按条件筛选,需额外配合 filter、map 等方法


















