ES6函数默认参数可精准避免undefined导致的空值判断,仅在参数为undefined时启用默认值,不覆盖0、false、''等falsy值;结合解构赋值(如{url='/api'}={})能安全处理配置对象,大幅简化校验逻辑。

JavaScript 中函数参数设置默认值,能直接避免 undefined 带来的空值判断,大幅简化参数校验逻辑。
使用 ES6 默认参数语法(最常用)
在函数定义时直接为形参赋默认值,调用时若未传参或传入 undefined,就会启用默认值;null、0、false、空字符串等“falsy 值”不会触发默认值——这是关键细节。
-
写法:
function fn(name = '匿名', age = 18) { ... } - 适用场景:参数是否传入明确,且默认行为清晰(如配置项、可选回调)
-
注意:默认值表达式只在参数为
undefined时求值,支持函数调用、变量引用甚至解构,默认值也可是其他参数(但需按顺序)
用逻辑运算符 || 或 ?? 在函数体内补缺(兼容旧环境)
当需要对 null 或 undefined 统一处理(比如把 null 也视为空),就不能依赖默认参数,而该用空值合并操作符 ??;|| 会误判 0、false 等 falsy 值。
-
??更安全:const name = inputName ?? '匿名'—— 只有inputName是null或undefined才生效 -
适合复杂校验:比如要求参数必须是字符串,可结合类型检查:
const title = typeof opts.title === 'string' ? opts.title : '默认标题' -
不推荐全靠
||:name || '匿名'在name = ''或name = 0时也会替换,易引发隐性 bug
对象解构 + 默认值(处理大量可选配置)
接收配置对象时,用解构默认值是最简洁的校验方式,既声明了预期结构,又自动填充缺失字段。
立即学习“Java免费学习笔记(深入)”;
-
写法示例:
function request({ url, method = 'GET', timeout = 5000, headers = {} } = {}) { ... } -
要点:外层
= {}防止传入undefined导致解构报错;内层各属性默认值独立生效 -
进阶技巧:嵌套解构也可设默认值,如
{ data: { code = 0, msg = '' } = {} } = config
用函数封装校验逻辑(适合复用或复杂规则)
当默认值需动态计算,或校验逻辑涉及多个参数联动、业务规则(如“start 必须小于 end”),可抽离成校验函数,保持主逻辑干净。
-
例如:
function validateRange({ start = 0, end = 100 } = {}) { return { start: Math.min(start, end), end: Math.max(start, end) }; } - 优势:校验与业务分离,便于测试和复用;错误提示、日志、降级策略也能集中管理
-
提醒:避免在默认参数里写副作用代码(如
date = new Date()每次调用都新建实例,通常没问题;但log('default used')就不该放进去)


















