javascript中为函数参数设默认值应优先用es6默认参数(仅undefined时生效),其次用??或显式判断undefined;||会误将0、''等有效假值替换,默认值场景慎用。

JavaScript 中可以利用 逻辑或(||)的短路特性为函数形参提供默认值,但要注意它只在左侧值为“假值(falsy)”时才返回右侧值——这意味着 0、''(空字符串)、false、null、undefined、NaN 都会触发 fallback,**不区分有意传入的假值和真正未传参的情况**。
用 || 实现简单 fallback(适合宽松场景)
当明确知道调用方不会传入 0、'' 等假值,或者这些值本身也应被视作“无效”而使用默认值时,|| 最简洁:
function greet(name) {
name = name || 'Guest';
return `Hello, ${name}!`;
}
greet(); // "Hello, Guest!"
greet('Alice'); // "Hello, Alice!"
greet(''); // "Hello, Guest!" ← 空字符串也被替换
greet(0); // "Hello, Guest!" ← 数字 0 也被替换
更安全的写法:只对 undefined 做 fallback(推荐)
如果希望保留 0、false、'' 等有效输入,仅在参数未传或显式传了 undefined 时才用默认值,应改用:
-
ES6 默认参数语法(最推荐):
function fn(param = 'default') { ... }—— 仅当参数为undefined时生效,语义清晰,且支持复杂表达式 -
显式判断
=== undefined:name = (name === undefined) ? 'Guest' : name; -
使用空值合并操作符
??(ES2020+):name = name ?? 'Guest';—— 仅当左侧为null或undefined时才取右侧,默认值
为什么不用 && 做默认值?
&& 是“短路与”,它返回第一个假值,或最后一个真值。它不适合设默认值,例如:
function bad(name) {
return name && 'Default'; // 如果 name 是 'Tom' → 返回 'Default'(错!)
}
它无法保留原始真值,只适合做条件执行或保护性访问(如 obj && obj.prop)。
实际建议
- 新项目优先用 ES6 默认参数,可读性高、行为确定、支持解构默认值
- 需要兼容老环境且只处理
undefined时,用??或显式=== undefined判断 - 仅当业务逻辑确实需要把所有 falsy 值都视为“无效”时,才用
||,并加注释说明意图
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











