javascript中应优先使用??或解构默认值替代||设默认值,因||会错误覆盖0、false、''等合法假值,而??仅在null/undefined时生效,解构默认值则更清晰可控。

在 JavaScript 中,可以用逻辑或 || 运算符为函数参数快速设置默认值,原理是利用其“短路求值”特性:当左侧操作数为真值(truthy)时,直接返回它;否则返回右侧操作数。
基本用法:给形参设默认值
常见写法是在函数体内对参数做一次逻辑或判断:
- 如果传入的参数是假值(如 null、undefined、0、''、false、NaN),则使用右侧的默认值
- 代码简洁,适合对“空值”统一兜底的场景
例如:
function greet(name) {name = name || 'Guest';
return `Hello, ${name}!`;
}
greet(); // "Hello, Guest!"
greet('Alice'); // "Hello, Alice!"
greet(''); // "Hello, Guest!"(因为 '' 是假值)
注意:|| 会把所有假值都替换掉
这是关键限制——0、false、'' 等合法但假值的数据也会被覆盖,可能不符合业务预期:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 比如函数接受一个可为 0 的计数器参数:
function logCount(count) { count = count || 10; },调用logCount(0)会得到 10,而不是 0 - 同理,
logCount(false)或logCount('')都会触发默认值
更安全的替代方案:使用空值合并运算符 ??
ES2020 引入的 ?? 只在左侧为 null 或 undefined 时才使用右侧值,保留 0、false、'' 等有效假值:
function logCount(count) {count = count ?? 10;
console.log(count);
}
logCount(0); // 0(不会变成 10)
logCount(undefined); // 10
logCount(null); // 10
现代写法推荐:用解构 + 默认值
对于对象参数,结合解构赋值和默认值语法更清晰、更可控:
function createUser({ name = 'Anonymous', age = 18, isActive = true } = {}) {return { name, age, isActive };
}
createUser({ name: 'Bob' }); // { name: 'Bob', age: 18, isActive: true }
createUser({ name: '', age: 0 }); // { name: '', age: 0, isActive: true }(空字符串和 0 都被保留)
不复杂但容易忽略:选择 || 还是 ??,取决于你是否想把 0/''/false 当作有效输入。日常开发中,优先考虑 ?? 或解构默认值,避免意外覆盖。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










