javascript中扩展运算符(...)用于将可迭代对象展开为独立参数,替代apply(),支持数组、类数组、字符串等,但不可用于普通对象,且需防范null/undefined报错。

JavaScript 中用扩展运算符(...)传递函数参数,本质是把一个可迭代对象(如数组、类数组或字符串)“展开”成多个独立参数,替代传统的 apply() 写法,更简洁直观。
基本用法:数组转参数列表
当函数接收多个离散参数,而你手头是一个数组时,直接展开即可:
示例:
function sum(a, b, c) {
return a + b + c;
}
const nums = [1, 2, 3];
console.log(sum(...nums)); // 6 —— 等价于 sum(1, 2, 3)
这比 sum.apply(null, nums) 更易读,也支持箭头函数(apply 不适用)。
混合使用:固定参数 + 展开参数
扩展运算符可以放在参数列表任意位置,常用于“前几个固定参数 + 后续动态参数”场景:
-
Math.max(10, ...[2, 5, 8])→ 返回10(因为10是第一个参数,max取最大值) -
Math.max(...[2, 5, 8], 10)→ 同样返回10,等价于Math.max(2, 5, 8, 10) - 注意:不能在函数调用中多次使用扩展运算符而不加逗号分隔,语法会报错
处理类数组对象(如 arguments 或 NodeList)
扩展运算符能自动将类数组对象转为真数组再展开,无需先用 Array.from:
示例(在函数内部):
function logAll() {
console.log('所有参数:', [...arguments]); // ✅ 直接展开 arguments
}
logAll('a', 'b', 'c'); // ['a', 'b', 'c']
对 DOM 查询结果也适用:console.log(...document.querySelectorAll('div')) 会逐个输出每个 <div> 元素。
<h3>注意事项与常见坑</h3>
<ul>
<li>只能用于**可迭代对象**(Array、String、Map、Set、arguments 等),普通对象默认不可迭代,<code>{a:1, b:2} 直接展开会报错
null 或 undefined 会抛出 TypeError,建议展开前做判断或提供默认空数组:myFunc(...arr || [])











