javaScript 展开 运算符 (…)用于将 可迭代 对象 (如数组、 字符串 、Set 等)展开为独立元素,在函数调用中替代apply(),支持与普通参数混合使用,但必须位于 实参 列表末尾。

javascript 展开运算符(Spread operator)是三个英文句点 …,它能把 可迭代对象(如数组、字符串、类数组对象)或对象“展开”成独立的元素。在函数调用中,它的核心作用是 ** 把一个数组或类数组结构“打平”,作为多个独立参数传给函数 **,替代了过去常用的 apply() 方法。
让数组变成多个参数
以前调用函数时,如果参数已经存在数组里,得这样写:
math.max.apply(NULL, [1, 5, 3]) // 5
现在用展开运算符更直观:
Math.max(…[1, 5, 3]) // 5
它等价于 Math.max(1, 5, 3),数组被“拆开”,每个元素变成一个实参。
立即学习“Java 免费学习笔记(深入)”;
可以和其他参数混合使用
展开运算符不一定要独占全部参数,可以和普通参数、其他展开表达式组合:
-
myFunc('a', ……arr, 'z')—— 开头一个固定值,中间展开数组,结尾再加一个值 -
console.log(……[1, 2], ……[3, 4])→ 输出1 2 3 4 - 但注意:展开运算符只能出现在 ** 实参列表的最后位置 **(除非是解构赋值场景,那是另一回事)
适用于任何可迭代对象
不只是数组,只要是实现了迭代协议的对象都可以展开:
-
console.log(……'hi') // h i(字符串逐字符展开) -
console.log(……new Set([1, 2, 2])) // 1 2(自动去重后展开) -
console.log(……document.querySelectorAll('div'))可直接传给函数处理 dom 节点列表
不能用于普通对象(除非在对象字面量中)
单独对普通对象使用展开运算符会报错:
myFunc({…obj}) // ❌ 错误:对象不可迭代(在函数调用中)
但这是常见误解——在函数调用中,… 只能作用于可迭代值;而 {……obj} 是对象展开,只在对象字面量或解构中合法,和函数调用无关。