扩展运算符...可将数组等可迭代对象展开合并为新数组,支持任意位置插入、多源混合及浅拷贝,且适用于字符串、Set、Map等类型。

用三个点 ... 把数组“摊开”,再放进一对方括号里,就能生成一个新数组。
基本写法:直接展开合并
语法非常直观:把要展开的数组前面加 ...,和其他元素一起写在 [] 里。
const arr1 = [1, 2]; const arr2 = [3, 4];const merged = [...arr1, ...arr2]; // [1, 2, 3, 4]- 也可以混入其他值:
[...arr1, 99, ...arr2]→[1, 2, 99, 3, 4]
和 concat() 的区别
以前常用 concat() 合并,比如 arr1.concat(arr2)。扩展运算符更简洁、更灵活:
- 支持任意位置插入(
concat()只能按顺序拼接) - 可同时展开多个来源(数组、字符串、甚至类数组)
- 不依赖方法调用,语义更贴近“把东西铺进来”
注意浅拷贝特性
合并后的新数组是原数组的浅拷贝——数字、字符串等基本类型完全独立;但对象、数组等引用类型仍共享同一份内存。
const a = [1, { x: 2 }]; const b = [...a];-
b[1].x = 99;→a[1].x也会变成99 - 如需深拷贝,得配合
JSON.parse(JSON.stringify())或专门工具
还能合并其他可迭代类型
不只是数组,字符串、Set、Map(取键或值)等也能用 ... 展开:
-
[...'abc']→['a', 'b', 'c'] -
[...new Set([1, 2, 2])]→[1, 2] -
[...new Map([['a', 1], ['b', 2]]).keys()]→['a', 'b']


















