为何函数参数默认值会被解构数组覆盖?
为什么展开数组调用函数时默认参数未生效?
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
相关产品推荐
相关产品推荐

