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也触发默认值,我们需要手动处理这种情况,有两种常见方式:
- 在函数内部判断参数是否为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"
- 使用空值合并运算符(??)
这是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
相关产品推荐
相关产品推荐

