JavaScript函数参数默认值仅在实参为undefined时生效,支持表达式和前序参数引用,与||有本质区别:后者会误将0、false等假值替换为默认值。

JavaScript中函数参数默认值通过在函数定义时用等号(=)直接赋值来设置,当调用时传入的参数为 undefined 时,才会触发默认值;null、0、false、空字符串等“假值”不会触发默认值。
语法:直接在形参后写 = 默认值
ES6起支持在函数声明或箭头函数中直接为参数指定默认值,写法简洁直观:
- 函数声明:
function fn(a = 1, b = 'hello') { ... } - 箭头函数:
const fn = (x = 10, y = [] ) => { ... } - 支持表达式或函数调用:
function log(msg = 'info', time = Date.now()) { ... }
触发条件:仅当实参严格等于 undefined
默认值不是靠“假值判断”,而是靠是否显式或隐式传入 undefined:
-
fn()→ a 是undefined,触发默认值 -
fn(5)→ b 是undefined,b 触发默认值 -
fn(5, null)→ b 是null,不触发,默认值被忽略 -
fn(5, false)、fn(5, 0)、fn(5, '')同理,都不会触发默认值
常见误区:和逻辑运算符 || 的区别
早期常用 a || 'default' 模拟默认值,但它会把所有假值(0、false、null 等)都转成默认值,语义不同:
立即学习“Java免费学习笔记(深入)”;
-
function bad(a) { a = a || 'default'; }→bad(0)得到'default' -
function good(a = 'default') { }→good(0)得到0,更精确可控
进阶用法:默认值可依赖前面的参数
默认值表达式可以引用左侧已定义的参数(注意顺序),适合构造动态默认行为:
function greet(name, greeting = `Hello, ${name}!`) { return greeting; }-
greet('Alice')→"Hello, Alice!" - 但不能反向引用:
function f(a = b, b = 1) { }会报错,因为a不能访问尚未初始化的b


















