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
相关产品推荐
相关产品推荐

