JavaScript默认参数仅在参数为undefined时生效,推荐使用ES6语法如name='游客';需兼容null等空值时用??或解构赋值;避免用||以防误覆盖0、false等合法假值。

当函数参数未传入时,JavaScript 会自动将其设为 undefined,而默认参数机制正是为此设计的:它只在参数值严格等于 undefined 时生效。所以最直接、标准的做法就是在函数定义中使用 ES6 默认参数语法。
用默认参数语法直接处理 undefined
这是现代 JavaScript 中推荐的方式,简洁、语义清晰,且天然适配“未传参 → undefined → 启用默认值”的逻辑:
- 写法:在参数后加
=和默认值,例如function fn(name = '游客') { ... } - 触发条件:仅当调用时完全省略该参数,或显式传入
undefined,才会启用默认值 - 不触发的情况:传
null、0、false、''等假值,都会被原样接收,不会回退到默认值
需要兼容 null 或其他空值时的兜底方案
如果业务要求“未传参、传 null、传空字符串等都统一用默认值”,就不能依赖原生默认参数,需手动判断:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 用
??(空值合并运算符):只在null或undefined时取默认值,安全且简洁function getName(user) { return user?.name ?? '匿名'; } - 用解构赋值 + 默认值:适合对象参数,可逐层设置兜底
function config({ timeout = 5000, retries = 3 } = {}) { ... } - 用
typeof显式检查:兼容老环境,明确只对undefined做处理if (typeof value === 'undefined') value = 'default';
避免用 || 设置默认值的陷阱
|| 会把所有假值(0、false、''、null、undefined、NaN)都当作“无效”,容易误覆盖合法输入:
立即学习“Java免费学习笔记(深入)”;
- 错误示例:
const count = options.count || 10;—— 若options.count是0,结果变成10,逻辑出错 - 正确替代:
const count = options.count ?? 10;或const count = options.count !== undefined ? options.count : 10;
默认值表达式的注意事项
默认值支持任意表达式,每次调用都会重新执行,这对动态值很有用,但也需注意副作用:
- 适合场景:生成新对象、调用工厂函数、获取当前时间等
function log(msg, time = Date.now()) { ... } - 关键细节:对象/数组默认值每次都是新实例,不会共享引用,无需担心意外修改

















