ES6默认参数语法让函数在缺省传参时仍可正常运行,如function greet(name = '游客');相比旧方法||易误判假值,推荐使用ES6方式,支持表达式、函数调用且每次重新计算,避免共享引用,更安全简洁。

JavaScript函数中设置参数默认值,可以让函数在缺少传参时依然正常运行。现代JS提供了简洁的语法来实现,默认值只有在传入的参数为 undefined 时才会被启用。
使用ES6默认参数语法
ES6引入了直接在函数定义中设置默认值的写法,语法清晰直观。
function greet(name = '游客', message = '欢迎光临') {console.log(`${name},${message}`);
}
greet(); // 输出:游客,欢迎光临
greet('小明'); // 输出:小明,欢迎光临
greet('小红', '很高兴见到你'); // 输出:小红,很高兴见到你
这种方式适用于字符串、数字、布尔值等基本类型,也支持表达式或函数调用作为默认值(但注意性能影响)。
利用逻辑运算符 || 设置默认值(旧方法)
在ES6之前,常用 || 操作符来处理默认值。它依赖“假值判断”,但存在局限性。
function multiply(a, b) {a = a || 1;
b = b || 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5); // 5
multiply(0, 5); // 5(有问题!0被认为是假值)
这种方法的问题在于,像 0、''、false 这类合法值也会被替换,因此不推荐用于需要精确控制的场景。
使用 typeof 判断 undefined(兼容老环境)
如果需要兼容老旧浏览器或确保只在参数未传时设默认值,可以手动检查类型。
function power(base, exp) {if (typeof exp === 'undefined') {
exp = 2;
}
return Math.pow(base, exp);
}
power(3); // 9
power(2, 3); // 8
这种方式最安全,适用于对参数类型敏感的函数,但代码略显冗长。
默认值支持复杂类型和函数调用
默认参数不限于简单值,还可以是对象、数组,甚至是函数返回值。
function createPost(author, date = new Date(), tags = []) {return { author, date, tags };
}
function log(msg, timestamp = getCurrentTime()) {
console.log([${timestamp}] ${msg});
}
注意:每次函数调用时都会重新计算默认表达式,除非是原始值。对象或数组的默认值每次都是新实例,避免共享引用问题。
基本上就这些。优先使用ES6默认参数,简洁又可靠。避免用 || 处理可能为假值的输入。根据实际需求选择合适方式即可。不复杂但容易忽略细节。










