逻辑或(||)用作默认值会误判所有假值(如0、''、false),而??和es6参数默认值仅在null/undefined时生效,更精准安全。

JavaScript 中逻辑或运算符(||)曾常被用来分配默认参数,但它有局限性——会把所有“假值”(falsy)都当作未提供而覆盖,比如 0、''、false、null、undefined、NaN。所以它其实不是“默认值”,而是“假值回退”。
逻辑或(||)的实际行为
它返回第一个真值(truthy)操作数,否则返回最后一个操作数。因此:
function greet(name) { return 'Hello, ' + (name || 'Guest'); }-
greet('Alice')→'Hello, Alice' -
greet('')→'Hello, Guest'(空字符串是 falsy,被替换了) -
greet(0)→'Hello, Guest'(数字 0 也是 falsy)
更安全的替代:空值合并运算符(??)
ES2020 引入的 ?? 只在左侧为 null 或 undefined 时才使用右侧值,其他 falsy 值(如 0、false、'')会被保留:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function greet(name) { return 'Hello, ' + (name ?? 'Guest'); }-
greet('')→'Hello, '(空字符串保留) -
greet(0)→'Hello, 0' -
greet(undefined)→'Hello, Guest' -
greet(null)→'Hello, Guest'
函数参数中的默认值语法(推荐)
ES6 支持直接在参数列表中写默认值,语义清晰且行为等价于 ??:
function greet(name = 'Guest') { return 'Hello, ' + name; }- 调用时传入
undefined或不传参,才会触发默认值 - 传入
0、false、''等,都会原样使用
什么时候还能用 ||?
仅当你**明确希望所有 falsy 值都被替换**时才用,比如清理用户输入中的空白或无效状态:
-
const config = userConfig || defaultConfig;(假设userConfig非空对象才有效) - 但要注意:如果
userConfig = {}(空对象,truthy),就不会 fallback;若它是null或undefined,则会 fallback
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










