You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在函数参数中同时使用扩展运算符和解构赋值?

关于...[param]参数写法的用途

这种写法是剩余参数语法结合数组解构的组合用法,本质是把所有传入的参数收集成一个数组,再通过数组解构提取第一个元素赋值给param,多余的参数会被直接忽略。它和普通单个参数写法的差异及用途主要有这些:

1. 明确表达只关心第一个参数的意图

当调用函数时传入多个参数,普通写法foo(bar)里bar会取第一个参数,但剩余参数仍会留在arguments对象中;而foo(...[bar])同样取第一个参数赋值给bar,写法本身就能明确传达代码只处理第一个参数、其余参数无需关注的语义,比普通写法的表意更清晰。

2. 改变函数的length属性

函数的length属性统计的是形参列表中非剩余参数的数量:

  • 普通写法function foo(bar) {}的foo.length为1
  • 而function foo(...[bar]) {}的foo.length为0,因为剩余参数不会被计入length统计

在一些框架或库的函数签名检测场景中,可能要求函数的length为0,这种写法就能满足这类特殊需求。

3. 类构造器中灵活适配父类参数传递

在子类构造器中,如果父类构造器可能接收多个参数,但子类仅需第一个参数做初始化,同时又需要保留透传所有参数给父类的能力,这种写法可以简化实现:

export class SomeClass extends SomeParent {
    constructor(...[configuration]) {
        super(...arguments); // 透传所有参数给父类
        this.config = configuration; // 仅使用第一个参数
    }
}

相比普通的constructor(configuration)写法,它既保留了子类仅处理第一个参数的逻辑,又无需修改形参列表就能灵活完成父类参数透传。

4. 便捷扩展默认值逻辑

当需要为参数设置默认值时,这种解构写法可以更清晰地表达“无论传多少参数,只取第一个,无参数时用默认值”的逻辑:

function foo(...[bar = 'default_val']) {
    console.log(bar);
}
foo(); // 输出 'default_val'
foo(1, 2); // 输出 1

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:45:01