JavaScript函数参数默认值问题:lastname未定义时需显示Doe
问题排查与修复方案
核心问题
- 你编写的
if (lastname === undefined)判断语句位于函数外部,不属于greetByDefault函数的作用域,函数执行时根本不会触发这个逻辑,属于无效代码。 - 当仅传入一个参数调用函数时,
lastname参数会自动被赋值为undefined,此时函数直接返回拼接后的字符串,自然会出现undefined的结果。
修复方案
这里提供两种可行的修复方式:
方案一:函数内部手动处理参数默认值
let name = 'John' function greetByDefault(firstname, lastname){ // 当lastname未传入或为undefined时,替换为'Doe' const actualLastname = lastname === undefined ? 'Doe' : lastname; return 'Hi ' + firstname +' '+ actualLastname + '!'; } console.log(greetByDefault('Jane', 'Doe')); console.log(greetByDefault(name));
方案二:使用ES6参数默认值(更简洁)
ES6支持直接为函数参数设置默认值,当参数未传入或传入undefined时,会自动使用预设的默认值:
let name = 'John' function greetByDefault(firstname, lastname = 'Doe'){ return 'Hi ' + firstname +' '+ lastname + '!'; } console.log(greetByDefault('Jane', 'Doe')); console.log(greetByDefault(name));
两种方案执行后,控制台都会输出你期望的结果:
Hi Jane Doe!
Hi John Doe!
内容的提问来源于stack exchange,提问作者Geo17
相关产品推荐
相关产品推荐

