javascript中默认参数应优先用es6语法(类似??),||适用于所有falsy值替换,??仅处理null/undefined;避免默认值含副作用。

JavaScript 中可以用 逻辑或(||) 和 空值合并(??) 操作符,借助短路求值特性来简化默认参数的设置,但两者适用场景不同,需注意区分。
用 || 设置“假值”默认值
当函数参数为 falsy 值(如 false、0、''、null、undefined、NaN)时,|| 会返回右侧默认值。适合不关心具体 falsy 类型、只希望有“有效值”的场景。
- 常见写法:
const name = inputName || '匿名用户'; - 注意:如果
inputName是0或false,也会被替换,可能不符合预期 - 函数内使用:
function greet(name) { name = name || '朋友'; return `你好,${name}`; }
用 ?? 设置仅针对 null/undefined 的默认值
?? 是空值合并操作符,只在左侧为 null 或 undefined 时才取右侧值,对 0、false、'' 等仍保留原值。更安全、语义更明确。
- 推荐用于真正想处理“未传参/显式为空”的情况
- 示例:
const count = itemCount ?? 10;—— 只有itemCount是null或undefined才用10 - 配合解构使用:
function config({ timeout = 5000, retries } = {}) { const maxRetries = retries ?? 3; }
ES6 默认参数语法更简洁直观
现代 JavaScript 推荐直接使用函数参数默认值语法,它本质也基于 undefined 判断,行为类似 ??,且可读性更强。
- 写法:
function fetch(url, options = {}, timeout = 3000) { ... } - 只在对应参数未传或传了
undefined时生效,不会覆盖0、false等合法值 - 与解构结合更强大:
function createButton({ label = '按钮', disabled = false, size = 'medium' } = {}) { ... }
避免在默认参数中执行副作用
短路表达式和默认参数都支持调用函数,但要注意:若右侧表达式有副作用(如修改状态、发请求),每次调用都会执行,可能引发意外行为。
- ❌ 危险写法:
function log(msg, time = Date.now()) { ... }——Date.now()在定义时就求值一次(实际是每次调用都执行,但易误判) - ✅ 安全写法:
function log(msg, time = undefined) { time = time ?? Date.now(); ... }或封装成函数 - 原则:默认值应是纯表达式,无状态依赖、无副作用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











