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

ES6中如何仅设置JS函数的单个可选参数,无需将前置可选参数设为undefined

ES6 函数跳过中间默认参数传值的实现方法

和Python支持关键字参数、可直接跳过中间位置参数给后面参数传值的逻辑不同,ES6的默认参数是基于位置匹配的,原生没有对应的跳过中间参数的语法。要实现给c传参同时不将b设为undefined,可采用以下两种常用方案:

方案1:使用对象解构参数(最推荐)

将带默认值的参数统一放到解构对象中声明,即可完全实现类似Python关键字参数的效果,不需要关心参数位置,也不会出现undefined:

// 函数定义:非必传参数放到解构对象中,同时给解构对象设置空对象默认值,避免不传第二个参数时报错
function func(a, {b = 1, c = 2} = {}) {
  // 函数内部可直接使用a、b、c变量
  console.log(a, b, c)
}

// 调用时仅传需要修改的参数即可
func(8, {c: 5}) // 输出 8 1 5,b自动使用默认值1,全程不会涉及undefined赋值

方案2:不修改原函数定义,显式传入b的默认值

如果无法修改原函数的声明逻辑,可以直接手动传入b的默认值,避免b被赋值为undefined:

// 原函数定义(不可修改)
function func(a, b = 1, c = 2) {
  console.log(a, b, c)
}

// 调用时显式传入b的默认值1
func(8, 1, 5) // 输出 8 1 5,b取值始终为1

补充:如果允许调用时传入undefined作为中间参数,也可以写func(8, undefined, 5),此时函数内部b会自动触发默认值为1,只是调用过程中b会被临时赋值为undefined,不符合要求的话不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:04