2026-02-25 21:14:29
在 JavaScript 中,当方法传参时若未指定参数值,参数会被赋值为 undefined。为避免这种情况,可采用以下方法:
1. 使用对象解构赋默认值通过对象解构的方式传递参数,并为每个属性设置默认值。这种方式允许只传递部分参数,未传递的参数会使用默认值,避免出现 undefined。
传递部分参数:exampleFunc({ param1: 'value1' }); // 输出: value1 default2
不传递任何参数(需传入空对象):exampleFunc({}); // 输出: default1 default2
注意:若直接调用 exampleFunc()(不传参),会因解构空对象报错。需额外处理:function exampleFunc(options = {}) { const { param1 = 'default1', param2 = 'default2' } = options; console.log(param1, param2);}exampleFunc(); // 输出: default1 default2
ES6 直接支持参数默认值,语法更简洁:
function traditionalFunc(param1 = 'default1', param2 = 'default2') { console.log(param1, param2);}traditionalFunc('value1'); // 输出: value1 default2traditionalFunc(); // 输出: default1 default2在函数内部手动检查参数是否为 undefined,并赋予默认值:
function manualCheckFunc(param1, param2) { param1 = param1 === undefined ? 'default1' : param1; param2 = param2 === undefined ? 'default2' : param2; console.log(param1, param2);}manualCheckFunc('value1'); // 输出: value1 default2manualCheckFunc(); // 输出: default1 default2通过 arguments 对象遍历参数并赋默认值(传统方式,已逐渐被淘汰):
function argumentsFunc() { const param1 = arguments[0] === undefined ? 'default1' : arguments[0]; const param2 = arguments[1] === undefined ? 'default2' : arguments[1]; console.log(param1, param2);}argumentsFunc('value1'); // 输出: value1 default2若使用 TypeScript,可通过类型注解和默认值严格避免 undefined:
function tsFunc(param1: string = 'default1', param2: string = 'default2') { console.log(param1, param2);}tsFunc('value1'); // 输出: value1 default2ES6+ 环境:优先使用参数默认值(方法 2)或对象解构(方法 1)。
需兼容旧环境:使用手动检查(方法 3)或对象解构 + 空对象默认值(方法 1 的改进版)。
直接使用 arguments 对象(方法 4),可读性差。
未处理直接解构空对象(如 function foo({a}) {} foo() 会报错)。
此方式兼容性较好(仅需 ES6+),且能清晰避免 undefined。