ES6函数默认参数在形参处直接赋初始值,仅当参数为undefined时生效,可精准兜底缺失参数而不覆盖0、false、''等假值;支持解构赋默认值,避免副作用,且比逻辑运算符||更语义准确。

ES6 的函数默认参数可以直接在形参位置赋初始值,避免调用时手动判断 undefined 或 null 后再赋默认值,从而大幅减少冗余的非空判断逻辑。
默认参数只在参数为 undefined 时生效
ES6 默认参数的触发条件是传入值严格等于 undefined(注意:不是 null、0、false 或空字符串)。这意味着你可以安全地保留“假值”语义,只对真正缺失的参数兜底。
-
func(0)→0会被使用,不会触发默认值 -
func(null)→null不等于undefined,仍会使用null -
func()或func(undefined)→ 才会启用默认值
用解构 + 默认值处理对象参数
当函数接收配置对象时,把默认值写在解构表达式里,比逐个检查属性更简洁清晰:
function request({ url = '/api', method = 'GET', timeout = 5000 } = {}) {
console.log(url, method, timeout);
}
这里 = {} 是给整个参数设默认空对象,防止传入 undefined 导致解构报错;内部解构里的 = 则为各属性设默认值。无需再写 options.url || '/api' 这类易出错的短路运算。
立即学习“Java免费学习笔记(深入)”;
避免副作用,默认值应是纯表达式
默认参数在函数定义时就确定(不是每次调用都重新求值),所以不要把带副作用的函数(如 Date.now()、Math.random())直接写成默认值,否则所有调用共享同一结果。
- ❌ 错误:
function log(time = Date.now()) { ... }→ 所有调用都用同一个时间戳 - ✅ 正确:
function log(time = Date.now()) { ... }可接受,但若需每次不同,应改为time = Date.now()写在函数体内,或用工厂函数:time = () => Date.now()
与逻辑运算符 || 的关键区别
很多人习惯用 name || 'default' 做默认值,但它会把 0、false、'' 等假值也替换掉。默认参数则更精准:
function greet(name = 'stranger') {
return `Hello, ${name}`;
}
greet('Alice'); // 'Hello, Alice'
greet(''); // 'Hello, '(空字符串被保留)
greet(); // 'Hello, stranger'
这种行为更符合“仅缺省才兜底”的语义,避免意外覆盖合法的假值输入。


















