javascript扩展运算符(...)用于将可迭代对象展开为独立元素,支持数组合并与插入、浅拷贝、类数组转换、函数传参及对象属性合并,实现更直观可控的数据处理。

JavaScript 的扩展运算符(...)用于把可迭代对象(如数组、字符串、对象、Set、Map)“打散”成独立的元素,常出现在数组字面量、对象字面量或函数调用中。它不是语法糖,而是改变了处理数据的方式——让展开动作更直观、更可控。
合并数组和插入新元素
用 ... 可以把多个数组展开后组合成一个新数组,还能在任意位置插入值。
const a = [1, 2]; const b = [3, 4]; const c = [...a, 0, ...b]; // [1, 2, 0, 3, 4]- 比
concat()更灵活:支持中间插入、重复展开、混入字面量值 - 不会修改原数组,返回全新数组
浅拷贝数组与类数组转换
扩展运算符能快速复制数组(仅第一层),也适用于将类数组对象转为真数组。
-
const original = [1, 2, 3]; const copy = [...original];—— 修改copy不影响original -
const nodeList = document.querySelectorAll('div'); const arr = [...nodeList];—— 支持直接展开 DOM 集合(现代环境) - 注意:嵌套数组或对象仍共享引用,属于浅拷贝
函数调用传参
把数组“摊开”成独立参数,替代老旧的 apply() 写法。
-
Math.max(...[1, 5, 3]); // 5(Math.max([1, 5, 3])会返回NaN) function greet(a, b, c) { console.log(a + b + c); } greet(...['Hi', ', ', 'World']); // "Hi, World"- 适合动态参数场景,比如从 API 获取参数列表后调用工具函数
对象展开与属性合并
ES2018 起支持对象使用 ...,用于浅合并、覆盖更新或构造副本。
-
const user = { name: 'Alice', age: 30 }; const updated = { ...user, city: 'Beijing' };→{ name: 'Alice', age: 30, city: 'Beijing' } - 同名属性后者覆盖前者:
{ ...obj1, ...obj2 }中obj2的键优先 - 只复制自身可枚举属性,不处理原型链、Symbol 键或 getter
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











