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

为何函数参数默认值会被解构数组覆盖?

为什么展开数组调用函数时默认参数未生效?

JavaScript 和 TypeScript 中的默认参数仅在对应位置未传入值(或传入undefined)时才会生效,你的代码里用数组展开语法...ba调用函数时,参数是按顺序直接映射的,根本没触发默认值逻辑。

具体来说,你定义的函数b形参顺序是val、arr1、arr2,调用时展开[1,2]相当于把1传给val,2传给arr1,arr2因为没有对应元素所以是undefined——val被明确传入了1,自然不会使用默认的false。就算给val加了boolean类型标注,TypeScript也只是编译时检查类型合规性,不会改变运行时的参数传递规则。

如果想实现你预期的效果(val用默认值,arr1和arr2取数组的1和2),有两种可行方案:

  • 调用时显式给val传undefined,再展开数组:
const a = () => {
  const ba = [1,2];
  b(undefined, ...ba);
}

这样val因为收到undefined会触发默认值,最终是false,arr1和arr2分别拿到1和2。

  • 调整函数参数顺序,把带默认值的参数放在末尾(这也是JS/TS的最佳实践,避免参数传递歧义):
function b(arr1, arr2, val: boolean = false) {
  console.log('val is:', val); // false
  console.log('array val 1:', arr1); // 1
  console.log('array val 2:', arr2); // 2
}
const a = () => {
  const ba = [1,2];
  b(...ba);
}
a();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:45:07