← 返回目录

函数参数默认值

给函数参数直接赋初始值,实参没传(undefined)时自动用默认值。

1. 基本对比

以前 · 手动判断 现在 · 参数默认值
function add(a, b, c) {
  if (c === undefined) c = 10;
  return a + b + c;
}
console.log(add(1, 2));
// 13
function add(a, b, c = 10) {
  return a + b + c;
}
console.log(add(1, 2));
// 13(c 自动用默认值 10)
console.log(add(1, 2, 3));
// 6(传了就用实参)

2. 什么时候才用默认值

以前 · || 的坑 现在 · 更准确
// 以前用 || 兜底:0、"" 也会被换掉
function f(a, b) {
  b = b || 10;
}
console.log(f(1, 0));
// 10(0 被当成假值,错了)
// 默认值只在 undefined 时生效
function f(a, b = 10) {
  return b;
}
console.log(f(1, 0));
// 0(0 是有效值,不被换)
console.log(f(1, undefined));
// 10(undefined 才触发默认值)

3. 配合解构

以前 现在
function fn(obj) {
  let name = obj.name || "未知";
  console.log(name);
}
fn({});
// 未知
function fn({ name = "未知" } = {}) {
  console.log(name);
}
fn({});
// 未知
默认值写在参数里更直观;只在实参为 undefined 时生效,传 0、""、false 不会被覆盖。