You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript ES6函数默认参数未按预期生效,调用返回NaN求助

为啥设置了ES6函数参数默认值,传null却返回NaN?

嘿,我来帮你理清楚这个问题!你明明给函数的第二个参数设了默认值'0',调用时传入20和null,按预期应该用20和默认值0计算出$20,结果却弹出了NaN,对吧?

先看你写的代码:

function alpha(a, b = '0') { return (a != null ? '$' + (parseFloat(a) + parseFloat(b)) : ""); }
alert(alpha(20, null)); // 输出为NaN

问题出在哪?

核心是ES6参数默认值的触发规则:只有当参数被传入undefined(或者完全不传这个参数)的时候,才会启用默认值。而null和undefined是两个不同的值——你显式传入了null,函数就会直接用这个null,而不会触发默认值'0'。

接下来,parseFloat(null)的返回值是NaN,因为null无法被解析成数字。20(转成数字后是20)加上NaN,结果自然还是NaN,最终就出现了你看到的异常输出。

怎么解决?

要让null也触发默认值,我们需要手动处理这种情况,有两种常见方式:

  1. 在函数内部判断参数是否为null/undefined
function alpha(a, b) {
  // 如果b是null或者undefined,就用默认值'0'
  const actualB = b != null ? b : '0';
  return a != null ? '$' + (parseFloat(a) + parseFloat(actualB)) : "";
}
alert(alpha(20, null)); // 现在会输出"$20"
  1. 使用空值合并运算符(??)
    这是ES2020新增的语法,专门用来处理null和undefined的默认值场景,比手动判断更简洁:
function alpha(a, b = '0') {
  // 当b是null或undefined时,用'0'替代
  return a != null ? '$' + (parseFloat(a) + parseFloat(b ?? '0')) : "";
}
alert(alpha(20, null)); // 同样输出"$20"

这样修改后,不管你传入null还是undefined,甚至不传第二个参数,都会使用默认值'0',就能得到预期的结果啦!

内容的提问来源于stack exchange,提问作者Deadpool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:32