JavaScript中如何设置函数的默认参数

来源:IPIPP.com作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《JavaScript中如何设置函数的默认参数》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《JavaScript中如何设置函数的默认参数》有用,将其分享出去将是对创作者最好的鼓励。

在JavaScript的函数使用中,调用方可能只会传递部分参数,未传递的参数默认会是undefined,这时候如果直接处理这些参数很容易出现类型错误或者逻辑异常,因此给函数设置默认参数是非常实用的开发技巧,能有效提升代码的健壮性和可维护性。

JavaScript中如何设置函数的默认参数

传统设置默认参数的方式

在ES6之前,JavaScript没有原生的默认参数语法,开发者通常会在函数内部通过逻辑判断来给参数设置默认值,最常见的是使用逻辑或运算符或者三元运算符进行判断。

使用逻辑或运算符

逻辑或运算符的判断规则是,如果第一个操作数为假值(包括undefined、null、0、空字符串等),就会返回第二个操作数,因此可以用这种方式设置默认参数。

function sum(a, b) {
  // 如果a是假值,默认设为0,同理处理b
  a = a || 0;
  b = b || 0;
  return a + b;
}

console.log(sum(1, 2)); // 输出3
console.log(sum(1)); // 输出1,b取默认值0
console.log(sum()); // 输出0,a和b都取默认值0

这种方式的问题是,如果调用方传递的参数是0、空字符串这类合法假值,也会被替换成默认值,可能不是我们想要的结果,比如传递0作为第一个参数,sum(0, 2)会返回2而不是2,不符合预期。

使用严格相等判断undefined

为了避免假值被误替换的问题,可以严格判断参数是否等于undefined,只有未传递参数时才会设置默认值。

function sum(a, b) {
  // 严格判断a是否为undefined,是的话设置默认值
  if (a === undefined) {
    a = 0;
  }
  if (b === undefined) {
    b = 0;
  }
  return a + b;
}

console.log(sum(0, 2)); // 输出2,0不会被替换
console.log(sum(1)); // 输出1
console.log(sum()); // 输出0

ES6原生默认参数语法

ES6新增了函数默认参数的原生语法,允许在函数定义的时候直接给参数指定默认值,语法更加简洁,也避免了传统方式的问题。

基础使用方式

只需要在函数参数列表中,给参数赋值即可设置默认值,调用时如果没有传递该参数或者传递的是undefined,就会使用默认值。

function sum(a = 0, b = 0) {
  return a + b;
}

console.log(sum(1, 2)); // 输出3
console.log(sum(0, 2)); // 输出2,0是合法参数,不会被替换
console.log(sum(1)); // 输出1
console.log(sum()); // 输出0
console.log(sum(undefined, 5)); // 输出5,undefined会触发默认值

默认值的求值时机

需要注意,ES6的默认参数是在函数调用时才会求值的,而不是函数定义的时候,每次调用函数如果用到默认值,都会重新计算默认值表达式。

let defaultNum = 10;
function getNum() {
  console.log('计算默认值');
  return defaultNum;
}

function sum(a = getNum()) {
  return a;
}

sum(5); // 传递了参数,不会调用getNum,不会输出日志
sum(); // 没有传递参数,调用getNum,输出"计算默认值",返回10
defaultNum = 20;
sum(); // 再次调用,默认值重新计算,输出"计算默认值",返回20

默认参数可以引用其他参数

默认参数的值可以引用前面已经定义的参数,但是不能引用后面还未定义的参数,否则会报错。

function createUser(name, age, info = `姓名:${name},年龄:${age}`) {
  return { name, age, info };
}

console.log(createUser('张三', 18));
// 输出 { name: '张三', age: 18, info: '姓名:张三,年龄:18' }

// 下面的写法会报错,因为age在info后面定义,不能在info的默认值中引用
// function test(a = b, b) {}

默认参数的注意事项

使用默认参数时还有一些细节需要注意,避免写出不符合预期的代码。

  • 如果传递的参数是null,不会触发默认值,因为null不等于undefined,比如sum(null, 2)会返回NaN,因为null参与加法运算会转换为0吗?不对,null转数字是0,哦这里sum(null,2)会是0+2=2?不对,null在加法运算里会转成0,所以sum(null,2)返回2,但是如果默认参数是a=0,传递null的话a是null,不是undefined,所以不会用默认值,这点要注意。
  • 默认参数会影响函数的length属性,函数的length属性返回没有默认值的参数的个数,有默认值的参数不计入length。
function fn1(a, b) {}
console.log(fn1.length); // 输出2

function fn2(a, b = 0) {}
console.log(fn2.length); // 输出1,b有默认值,不计入length

function fn3(a = 0, b) {}
console.log(fn3.length); // 输出0,a有默认值,不计入length

掌握JavaScript中设置函数默认参数的方法,能让我们写出更简洁健壮的代码,日常开发中优先使用ES6的原生默认参数语法,就能满足大部分场景的需求,如果有特殊兼容需求,再使用传统的判断方式即可。

JavaScript函数默认参数ES6参数赋值函数定义修改时间:2026-06-03 00:29:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。