扩展运算符的核心价值是将数组或类数组结构“一键摊平”为独立参数,使构造函数调用更自然安全,避免apply的冗长与严格模式问题;支持任意参数数量的自定义构造函数、类数组对象(如arguments、nodelist),但要求操作对象必须可迭代。

扩展运算符在构造函数参数传递时,核心价值是把数组或类数组结构“一键摊平”成独立参数,让调用更自然、更安全,彻底绕开 apply 的繁琐写法。
直接展开数组作为构造函数参数
传统方式中,若想用数组初始化一个实例(比如 new Date([2025, 0, 1]) 是无效的),必须手动解构或借助 apply:
-
new Date.apply(null, [2025, 0, 1])—— 写法冗长,且apply在严格模式下对this处理不直观 - 扩展运算符则简洁直接:
new Date(...[2025, 0, 1]),等价于new Date(2025, 0, 1)
适配任意参数数量的自定义构造函数
当构造函数接受不定数量参数(如封装一个坐标点类、配置项类)时,扩展运算符天然契合:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
class Point { constructor(x, y, z = 0) { this.x = x; this.y = y; this.z = z; } }const coords = [10, 20]; new Point(...coords); // {x: 10, y: 20, z: 0}- 即使数组长度变化(如
[5, 8, 3]),也能自动匹配前三个参数,多余项被忽略,不足项按默认值补全
与类数组对象(如 arguments、NodeList)配合使用
虽然 arguments 不是数组,但它是可迭代对象,可直接展开传给构造函数:
function createArray() { return new Array(...arguments); }createArray(1, 2, 3); // [1, 2, 3]- DOM 场景中:
new Set([...document.querySelectorAll('button')]);可直接把节点列表转为 Set 实例
注意边界:只作用于可迭代对象,不能展开 null/undefined
传入非可迭代值会报错:
-
new Date(...null)→ TypeError -
new Date(...undefined)→ TypeError - 稳妥做法是先校验或兜底:
new Date(...(arr || []))










