贝利信息

扩展运算符是什么_它有哪些实用的场景【教程】

日期:2026-01-22 00:00 / 作者:夜晨
扩展运算符...是解构动作,用于打散可迭代对象或对象属性;支持数组浅拷贝、函数传参、对象合并、字符串转数组,但不深拷贝、不处理null/undefined、不兼容Map/Set等。

... 是 JavaScript 中的扩展运算符,它不是“语法糖”或“炫技工具”,而是一个明确的**解构动作**:把可迭代对象(如数组、字符串、Set)或对象的可枚举属性,“打散”成独立元素或键值对,再参与后续构造。 它不负责深拷贝、不自动处理 nullundefined、也不兼容所有对象——用错地方会直接报错或产生意外引用。下面说几个你真正在写代码时会遇到

的问题点。

数组合并和浅拷贝:别再用 concatslice

当你想复制一个数组或拼接多个数组时,[...arr]arr.slice()arr.concat(b) 更直观,也更少出错。

函数调用传参:替代 apply 的安全写法

很多内置函数(如 Math.maxPromise.all)不接受数组,但你要传的是数组变量。这时候 ... 就是唯一自然解法。

对象合并与状态更新:Redux/Vue/React 中最常踩坑的地方

在不可变更新场景下(比如 Redux reducer),{...state, count: state.count + 1} 是标准写法,但它有几个隐性约束:

字符串和类数组转换:方便但有性能代价

你可以用 [...'hello'] 得到 ['h','e','l','l','o'],也能把 argumentsNodeList 转成真数组。

扩展运算符本身很简单,难的是判断“该不该用”——它解决的是“结构拆解”问题,不是“数据安全”或“深度控制”问题。一旦涉及嵌套、大型数据、或需要容错(比如不确定输入是否为数组),就得搭配 Array.isArraystructuredClone 或手动递归,不能无脑 ...